次のJavaコードがあるとします。
class mainul {
public static void main(String[] args) {
/*block 1*/
B b1 = new B();
A a1 = b1;
a1.m1(b1);
/*block 2*/
B b2 = new B();
B a2 = b2;
b2.m1(a2);
}
}
class A {
public static void p(Object o) {
System.out.println(o.toString());
}
public void m1(A a) {
p("m1(A) in A");
}
}
class B extends A {
public void m1(B b) {
p("m1(B) in B");
}
}
誰かがこのプログラムの出力がなぜであるかについていくつかの光を当てることができますか
m1(A) in A
m1(B) in B
a1の動的タイプがBであるため、ブロック1の出力は「M1(B)inB」であると予想されます。m1のAとBの関数シグネチャが一致しないことに気付きました(オブジェクトが必要です)。タイプAと他のBの引数)とAのメソッドが優先されるようですが、block2の出力と一致していないように見えるため、これを実際に私の出力にリンクすることはできません。
御時間ありがとうございます