作者cheetim (所失者寡所得者众??)
看板java
标题[问题] methods在多型跟继承之间
时间Wed Apr 30 16:13:14 2008
下面是程式码:
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 q){ System.out.println("Q::Q"); }
public void m(R r){ System.out.println("Q::R"); }
}
class R extends Q {
public void m(P p){ System.out.println("R::P"); }
public void m(Q q){ System.out.println("R::Q"); }
public void m(R r){ System.out.println("R::R"); }
}
public class Q3 {
public static void main(String[] args) {
P pp = new P();
Q qq = new Q();
R rr = new R();
P pq = qq;
Q qr = rr;
pp.m(qq);
pq.m(pp);
pq.m(qq);
rr.m(pp);
qq.m(pq);
qq.m(qq);
((P) qq).m(qq);
((P) qq).m((Q) rr);
}
}
执行结果是
P::Q
Q::P
Q::Q
R::P
Q::P
Q::Q
Q::Q
Q::Q
现在问题是 如果把"//这一行"的method给注解掉後 执行结果是
P::P
Q::P
Q::P //这边
R::P
Q::P
Q::Q
Q::P //这边
Q::P
上面两个"//这边" 为什麽会是Q::P
而不是 Q::Q 勒????
我想不出一个道理来
希望各位高手们帮忙解释一下
谢谢搂
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.118.41.143
1F:推 slalala:pq.m(this);? 04/30 16:41
2F:→ cheetim:不是的。pq.m(qq);呼叫到的因该是 Q物件中的第二个m() 04/30 16:49
3F:→ cheetim:但是却呼叫到物件Q中第一个m()。 04/30 16:52
4F:推 supertitler:没有Q所以它把Q当成P了 04/30 18:19
5F:→ supertitler:还有用父类别宣告的变数不能呼叫子类别才定义的方法。 04/30 18:21
6F:→ cheetim:那pq.m(pp);因该会是P::P阿 为何结果是Q::P 04/30 20:54
7F:→ supertitler:override 04/30 21:34