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

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

新手關于接口的小問題請教

新手關于接口的小問題請教

醉里挑燈開車 2017-06-30 11:24:29
interface?A { ????default?String?getName(){return?getClass().getName()?+?"-"?+?hashCode()} } interface?B { ????default?String?getName(){return?getClass().getName()?+?"-"?+?hashCode()} } class?C?implements?A,B { ????public?String?getName(){return?B.super.getName();} }如圖這段代碼,我想問的是類C中調用B類的getName時為什么不能直接 ?B.getName( ) ? 而是B.super.getName( )這樣寫豈不是調用的是B的超類的getName()方法了嗎??是因為非靜態方法不能直接調用?可是B類中getName方法已經重寫了吧,用B類超類中的getName()方法就不一樣了吧??請大神解答一下!
查看完整描述

2 回答

?
四無小青年

TA貢獻88條經驗 獲得超43個贊

這是java8的新特性默認方法,默認方法允許接口中存在帶方法體的方法且子類可以不用重寫,在加上接口可以多繼承,這就會出現一個類繼承多個接口而多個接口具有相同的方法簽名這種情況,這會造成歧義,外部直接調用子類的默認方法時不能確定是調用那個接口的方法。
所以java8規定如果存在多繼承默認方法沖突,子類需要重寫默認方法,或者直接調用更上層的默認方法來消除歧義,不然會編譯出錯。這就是你所提的問題了,A和B存在相同方法,所以子類通過調用B父類的默認方法來消除歧義。
若解惑,望采納

查看完整回答
反對 回復 2017-07-04
  • 2 回答
  • 0 關注
  • 1261 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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