从子类实例调用超类方法

时间:2016-05-15 14:29:43

标签: java inheritance extends

所以我有以下代码:

class Super {
    private String name="super";
    public String name(){
        return this.name;
    }
}
class Sub extends Super {
    private String name = "sub";
}
public class Main {
    public static void main(String[] args) {
        System.out.println(new Sub().name());
    }
}

我得到的结果是:超级。 我不知道为什么?!方法name()不应该调用被调用的对象的this,并且Sub扩展Super后它应该能够在其成员上使用它吗? !

1 个答案:

答案 0 :(得分:1)

您可能认为name中的Sub成员字段应该覆盖 name Super成员字段。它没有:字段不能在Java中重写。此外,您已将这两个字段定义为private,这意味着该成员仅对该类的其他成员可见(并且不是派生类或其他类的成员)。因此,在您的代码中,Super有自己的name字段的私有定义,Sub有自己完全不同的私有定义。两者都没有意识到对方的存在。

Java中的标准做法是使用 getter和setter 来访问内部数据。如果需要,您可以在派生类中自由覆盖它。