输出 :
sup.field = 0, sup.getField() = 1 //我就不明白这里为什么是1?
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0class 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, sup.getField() = 1 //我就不明白这里为什么是1?
sub.field = 1, sub.getField() = 1, sub.getSuperField() = 0class 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());
}
}
public int getField() {
return field;
}
子类中的getField() 已经讲父类中的相同方法重写了,这样根本就调用不到父类的。
因为你new的是子类的对象 所以
sup.getField() 找的是Sub里的getField()方法。
public int field = 1;
SO :sup.getField() = 1.
静态绑定:变量和静态方法。
动态绑定:实例方法。