class HelloWorld{
public static void main(String []args){
A j = new B();
B k = new B();
System.out.println(j.foo(k));
}
}
class A {
public int foo(A p) { return 1; }
}
class B extends A {
public int foo(A p) { return 2; }
public int foo(B p) { return 3; }
}
したがって、印刷される出力は 2 になります。これがどのように行われるのかわかりません。j
オブジェクトはコンパイルされた形式とは見なされませんかA
? それでも、コンパイル時と実行時の両方でクラスのクラスであっても、型パラメーターを使用するクラスB
バージョンを実行します。これはなぜですか?foo
A
k
B