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
そのアップキャストされたオブジェクトには、2つの別個の「i」プロパティがあるようです。1つの「i」は直接アクセス可能(ai)で、もう1つは子クラスのメソッド(a.printI())を介してアクセスできます。
アップキャストされたオブジェクトはスーパークラスからプロパティを取得し、子クラスからメソッドを取得するように見えます。
オブジェクトはどのようにして2つの別々の「i」を持つことができますか?!