如何在子方法中访问子类中的父类变量?

时间:2016-11-15 19:21:29

标签: java

我有一个班级

public class A {
    private String name;

    public void setName(String name){
        this.name = name;
    }

    public string getName(){return name;}

    public String toString() {
       StringBuilder builder = new StringBuilder();
       builder.append(name).append(", ");
       return builder.toString();
    }
}

我有一个扩展A的子类B,我必须在B中使用toString方法中的A访问名称。我编写了以下代码但不确定这是否是一个好习惯?

public class B extends A {
    private String gender;

    public void setGender(String gender){
        this.gender = gender;
    }

    public string getGender(){return gender;}

    @Override
    public String toString() {
       c = new A();
       StringBuilder builder = new StringBuilder();
       builder.append(c.getName()).append(", ");
       builder.append(gender).append(", ");
       return builder.toString();
    }
}

编辑: 如果我无法访问B类中的私有String名称,那么使用@Override setName()是否必须super.setName(name)?在那种情况下,如果我不想使用A的任何对象,那么在不扩展A类的情况下使用B类有何不同?

我刚开始使用JAVA来修改服务。

3 个答案:

答案 0 :(得分:6)

当您继承一个类时,您还继承了继承的所有公共和受保护的方法和变量。所以你可以做到

@Override
public String toString() {
   StringBuilder builder = new StringBuilder();
   builder.append(this.getName()).append(", ");
   builder.append(this.getGender()).append(", ");
   return builder.toString();
}

答案 1 :(得分:4)

只需在您的toString方法中调用getName()super.getName()

即可

像:

@Override
public String toString() {
   StringBuilder builder = new StringBuilder();
   builder.append(getName()).append(", ");
   builder.append(gender).append(", ");
   return builder.toString();
}

答案 2 :(得分:2)

永远不要忘记古老的格言:你不会继承父母的私生子。

如果您希望B能够访问A.name,您可以选择以下几种方式:

  • name中将public更改为protected(差错)或A(更好)。
  • 通过name的设置者和获取者访问A,例如this.getName()
  • 使用reflection

您目前所做的只是返回A.name默认值,而不是实际属于B实例的名称值。