输出 :
sup.field = 0, sup.getField() = 1  //我就不明白这里为什么是1?
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0
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());
}

解决方案 »

  1.   

    sup.getField() 返回的是子类中的field哇 = 1
      

  2.   

    sup.getField() 调用class Sub 中的 
    public int getField() {
            return field;
        }
      

  3.   

    sup.field is the attribute of class Super, and the method sup.getField() is the method referred to class Sub.Because this statement: Super sup = new Sub(); 
      

  4.   

    我是比较奇怪为啥sup.field = 0,而不是实际类Sub 的1
      

  5.   

    用这种多态的方式的时候,父类的引用指向子类的实例,调用的是子类方法。
    子类中的getField() 已经讲父类中的相同方法重写了,这样根本就调用不到父类的。
      

  6.   

    It was casted to Super...
      

  7.   

    Super sup = new Sub(); 
    因为你new的是子类的对象 所以
    sup.getField() 找的是Sub里的getField()方法。
    public int field = 1;
    SO :sup.getField() = 1.
      

  8.   

    java中有两种绑定,静态绑定和动态绑定。变量用的是静态绑定,就是说在编译的时候已经绑定好了。而方法是在运行时去绑定的。换句话说就是在.java文件编译成.class文件的时候变量的值已经定死了。所以sup.field等于0。
    静态绑定:变量和静态方法。
    动态绑定:实例方法。
      

  9.   

    多态对变量,private或者final方法无效
      

  10.   

    我是比较奇怪为啥sup.field = 0,而不是实际类Sub 的1我也奇怪这个
      

  11.   

    我倒,我眼花没看清楚,我一直以为 Super sup = new Super(); 谢谢大家