在将子类的对象向上转型为父类型时,当调用该对象的非private字段的值时,该值为什么是等于父类该字段的值啊?class Super {
          public int field = 0;
          public int getField() {
                    return field;
          }
}class Sub extends Super {
          public int field = 1;
          public int getField() {
                    return field;
          }
          public int getSuperField() {
                    return super.field;
          }
}public class FieldAccess {
          public static void main(String[] args) {
                    Super sup = new Sub();
                    System.out.println("sup.field = " + sup.field + ",sup.getField = " + sup.getField());
                    Sub sub = new Sub();
                    System.out.println("sub.field = " + sub.field + ",sub.getField() = " + sub.getField()
                                + ",sub.getSuperField() = " + sub.getSuperField());
          }
}
为什么sup.field=0,望高手解答

解决方案 »

  1.   

    只有方法重写,没有属性重写。所以public int field = 1;是子类中新增的成员变量,上溯转型对象不能操作子类中新增的成员变量和新增的方法。
      

  2.   

    这是父类的引用指向子类,所指向的值为引用的父类。
    多态性的前提是继承,重写,只有经过重写的才能被动态的调用,在运行过程中,才会使用实际new出来的对象。