试图理解 Java 中的向上转换。最近观察到的奇怪行为。
例子:
public class A extends B {
public int i = 2;
public void printI() {
System.out.println("print i = " + this.i);
}
public static void main(String[] args) {
B a = new A(); // <- upcasting here
System.out.println("i = " + a.i);
a.printI();
}
}
class B {
public int i = 1;
public void printI() {}
}
//Output:
//i = 1
//print i = 2
似乎,该向上转换的对象具有两个单独的“i”属性。一个“i”可以直接访问(ai),另一个通过子类的方法访问(a.printI())。
看起来向上转换的对象从超类获取属性,从子类获取方法。
对象怎么可以有两个单独的“i”?!