当对象的类型是子对象时,为什么使用父变量的值而不是子变量的值?

时间:2017-02-27 20:32:08

标签: java variables polymorphism

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?

2 个答案:

答案 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中的变量。