我有下面的代码的问题之间的关系(这是调用动态绑定?)。我对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"); }
}
没有变量'pd',所以很难回答你的第一个问题... – 2012-04-19 12:51:00
但要回答所有的问题问题,你应该阅读[Java中的继承](http://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html)。 – 2012-04-19 12:52:44
其中pd ...? – 2012-04-19 12:53:03