我是一年级IT学生,正在接受OOP ...

我有这个抽象的父类...

public abstract class Person{
private String Name;

protected Person(){
    setName("xxxxxxxx");
}

public abstract String getName();
public abstract void setName(String name);


}

这是它的子班...

public class PetOwner extends Person{
private boolean hasKids;
private boolean hasAllergies;

public PetOwner(){
       setName("xxxx");
       setAllergies(true);
       setKids(true);
}

public PetOwner(String name, boolean a, boolean k){
    setName(name);
    setKids(k);
    setAllergies(a);
}

public String getName(){return Name;}
public void setName(String n){ Name = n;}

public boolean getAllergies(){return hasAllergies;}
public void setAllergies(boolean a){hasAllergies = a;}

public boolean getKids(){return hasKids;}
public boolean setKids(boolean k){hasKids = k;}


}

当我编译子类时,它的错误是“名称”是Person的私有变量。

我的问题是如何通过不将其更改为公共或受保护的方式访问子类中父类的私有变量?

最佳答案

如果您不想将“字符串名称”访问修饰符更改为public或protected,请不要将名称设置器和getter定义为抽象。做这个:


public String getName(){返回名称;}
public void setName(String name){Name = name;}



在您的孩子班上;做这个:


公共字符串getName(){返回super.getName();}
公共无效setName(String n){super.setName(n);}


另外一点:您没有在超类构造函数中为Name赋值。请改写Name = xxxx,因为您正在调用抽象的setter!

09-16 03:55