我对以下代码有疑问(这是调用动态绑定吗?)。我对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"); }
}