所以我有以下代码:
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
后它应该能够在其成员上使用它吗? !
答案 0 :(得分:1)
您可能认为name
中的Sub
成员字段应该覆盖 name
Super
成员字段。它没有:字段不能在Java中重写。此外,您已将这两个字段定义为private
,这意味着该成员仅对该类的其他成员可见(并且不是派生类或其他类的成员)。因此,在您的代码中,Super
有自己的name
字段的私有定义,Sub
有自己完全不同的私有定义。两者都没有意识到对方的存在。
Java中的标准做法是使用 getter和setter 来访问内部数据。如果需要,您可以在派生类中自由覆盖它。