Java 从子类实例调用超类方法
因此,我有以下代码:Java 从子类实例调用超类方法,java,inheritance,extends,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) {
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
,那么它应该能够在其成员上使用它 您可能认为Sub
中的name
成员字段应该覆盖Super
中的name
成员字段。事实并非如此:在Java中不能重写字段。此外,您已将这两个字段定义为private
,这意味着该成员仅对该类的其他成员可见(而不是派生类或其他类的成员)。因此,在您的代码中,Super
对name
字段有自己的私有定义,Sub
有自己完全不同的私有定义。两人都不知道对方的存在
Java中的标准实践是使用getter和setter来访问内部数据。如果需要,您可以在派生类中自由重写它。记住一条简单的规则:字段不是多态的,只有方法是多态的(除非它们是私有的、最终的或静态的)。Java中没有
virtual
关键字。@SamTebbs33抱歉,brain fart。我每天使用java、C++、C语言和其他几种语言,有时很难保持它们的正确性!我以为这就是问题所在!:)