在将子类的对象向上转型为父类型时,当调用该对象的非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,望高手解答
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,望高手解答
多态性的前提是继承,重写,只有经过重写的才能被动态的调用,在运行过程中,才会使用实际new出来的对象。