set和get方法中的错误

时间:2015-02-14 04:50:51

标签: java class abstract

我是第一年参加OOP的IT学生......

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

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;}

}

当我编译子类时,它的错误是" Name"是Person的私有变量。

我的问题是如何通过不将其更改为public或protected来访问子类中父类的私有变量?

2 个答案:

答案 0 :(得分:2)

  1. 如果您不想更改" String Name"请不要将您的名字设定者和获取者定义为摘要。访问修饰符为public或protected。这样做:
  2. public String getName(){return Name;} 
    public void setName(String name){Name = name;}
    
    1. 在你的孩子班上;这样做:
    2. public String getName(){return super.getName();}
      public void setName(String n){ super.setName(n);}
      

      另一个注意事项:您没有在超类构造函数中为Name赋值。写Name = xxxx,因为你正在调用一个抽象的setter!

答案 1 :(得分:0)

private成员对于定义它们的实体是私有的。protected对于它们被定义的实体及其子类是私有的。 public表示无处可见/无法访问。

粗略地说,如果在给定实体中定义属性,那么几乎所有的管理都应该在同一个地方定义。这意味着如果Personname,那么方法setNamegetName应该在Person中定义。它们可以在子类中重新定义,但它们至少应该在Person中定义。

考虑一下:为什么您希望(通常情况下)每个PetOwnerClergyMan定义setName?他们可能都会完全一样;所以在Person中分析定义是正确的方法。