私はVariables doesn't exhibit polymorphic behaviorを知り、その方法に限定されています。しかし、以下のコードは、オブジェクトの型を返す際に少し混乱します。オーバーライドされたメソッドが多態的な振る舞いを示さないのはなぜですか?
その子メソッドを呼び出す(これは正しい)、つまり子オブジェクトを返すことを意味します。だから、なぜ子変数の値を出力しないのですか?
class Parent {
int var = 11;
public Parent getInstance() {
System.out.println("In Parent ...");
return new Parent();
}
}
class Child extends Parent {
int var = 22;
public Child getInstance() {
System.out.println("In Child ...");
return new Child();
}
}
public class VariableHiding {
public static void main(String[] args) {
Parent p = new Child();
System.out.println(p.getInstance().var); // something's fishy?
}
}
// Output : In Child ... 11
PS:そのない(変数が多型に参加していないの話が、ここで言及した1子OBJのオブジェクトを返し、そのobjは代わりに、独自の親のVARを保持している)this oneの重複
しかし、p.getInstance()はCHILDオブジェクトに評価されます。 –
@実行時の型は、コンパイル時の型ではなく子である。 – Eran