public class Parent {
String name = "parent";
public static class Child extends Parent {
String name = "child";
}
public static void main(String[] args) {
Parent p = new Child();
Child c = new Child();
System.out.println(p.name); //parent
System.out.println(c.name); //child
}
}
有一个规则,即对象的类型定义了内存中存在哪些属性。 所以我的问题是为什么p.name的输出是' parent'但不是孩子的#39; 当p对象的类型是Child?
时答案 0 :(得分:2)
因为在子类中定义具有相同名称的字段不会覆盖父类中的字段。
方法可以覆盖,字段不可以。
此处p.name
引用name
声明类型的Parent
:
Parent p = new Child();
Child c = new Child();
System.out.println(p.name); //parent
答案 1 :(得分:-1)
为什么当p对象的类型为Child时,p.name的输出是'parent'而不是'child'?
因为ovverriding / polymorphism仅适用于方法。变量仍然绑定到它的类型。在您的情况下,类型是Parent,因此您可以看到Parent中的变量。