亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java 多態多個繼承的疑惑?

java 多態多個繼承的疑惑?

皈依舞 2019-07-06 23:45:41
自己在學習多態的時候有看到這么一個例子,但是不是很理解,如下://Test.javapublicclassTest{publicstaticvoidmain(String[]args){Ac=newC();c.add();//"C"}}classA{publicvoidadd(){System.out.println("A");}}classBextendsA{publicvoidadd(){System.out.println("B");}}classCextendsB{publicvoidadd(){System.out.println("C");}}有三個類,關系為C繼承B,B繼承C,同時三個類里面都有一個add()方法,此時如果創建Ac=newC();以后,再調用c.add();輸出是"C",說明是調用了C里面的add()方法但是如果我改成這樣:publicclassTest{publicstaticvoidmain(String[]args){Ac=newC();c.add();//"B"}}classA{publicvoidadd(){System.out.println("A");}}classBextendsA{publicvoidadd(){System.out.println("B");}}classCextendsB{//publicvoidadd(){//System.out.println("C");//}}即C里面沒有add()方法了,為什么輸出是"B",而不是"A"?我自己的理解是:我在創建c這個對象的時候是使用的A類似,那么如果C里面沒有add()方法,就無法重寫,應該直接調用A里面的add()方法,但是實際情況好像并非如此,因此比較迷惑.希望能有前輩可以指點一二,不勝感激.
查看完整描述

2 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

newC()創建的就是一個C的對象,跟你把它賦值給什么變量沒有關系,不管是A還是B還是C還是Object。
調用c.add就是調用c對象的add方法,與c被聲明成什么類型無關。C沒有重寫add方法,則它的add方法繼承自它的直接父類B
                            
查看完整回答
反對 回復 2019-07-06
?
隔江千里

TA貢獻1906條經驗 獲得超10個贊

首先Java原則上沒有多繼承,只有類與類之間的單繼承,因此ClassC繼承ClassB只需要關注B的方法有沒有被C重寫,如果沒有則完全繼承B的所有方法實現。同理ClassB和ClassA的關系也是如此。
如果想要輸出A,那上述的情況是B也不重寫add()方法,完全繼承A的add()方法
                            
查看完整回答
反對 回復 2019-07-06
  • 2 回答
  • 0 關注
  • 277 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號