次のコードについて質問があります (この呼び出しは動的バインディングですか?)。3点で迷っています。
まず、変数 pq の平均は何ですか? pd はまだ P のデータ型ですか、それとも Q ですか?
次に、pq.m(pp) メソッドを呼び出すと、結果が Q::P になるのに P::Q にならないのはなぜですか?
最後に、これはどういう意味ですか ((P) qq).m(qq);? 誰かが私の問題を解決してくれることを願っています。
次のコードの結果は、
P::Q、Q::P、Q::Q、R::P、Q::P、Q::Q、Q::Q に なります。
class Test {
public static void main(String[] args) {
P pp = new P();
Q qq = new Q();
R rr = new R();
P pq = qq;
pp.m(qq);
pq.m(pp);
pq.m(qq);
rr.m(pp);
qq.m(pq);
qq.m(qq);
((P) qq).m(qq);
}
}
class P {
public void m(P p){System.out.println("P::P"); }
public void m(Q p){System.out.println("P::Q"); }
public void m(R c){System.out.println("P::R"); }
}
class Q extends P {
public void m(P p){System.out.println("Q::P"); }
public void m(Q p){System.out.println("Q::Q"); }
public void m(R c){System.out.println("Q::R"); }
}
class R extends Q {
public void m(P p){System.out.println("R::P"); }
public void m(Q p){System.out.println("R::Q"); }
public void m(R c){System.out.println("R::R"); }
}