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语言和其他几种语言,有时很难保持它们的正确性!我以为这就是问题所在!:)