作者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