Java 基礎(chǔ) - 繼承

參考

C++多繼承有什么壞處,Java的接口為什么可以擯棄這些壞處?
C++多繼承(鉆石繼承)的問(wèn)題和解決
C++繼承與java繼承的區(qū)別

總結(jié)

  1. 設(shè)計(jì)繼承的主要原因是為了重用,它是提升軟件開(kāi)發(fā)效率的主要因素之一 繼承機(jī)制

  2. 多繼承存在缺陷,主要原因是多繼承的使用會(huì)產(chǎn)生diamond problem/鉆石危機(jī)/菱形繼承. C++和Java 都存在多繼承的問(wèn)題

  3. 對(duì)于C++來(lái)說(shuō),特性之一是類多繼承,為了解決多繼承帶來(lái)的問(wèn)題:二義性和數(shù)據(jù)冗余,C++可以通過(guò)指明訪問(wèn)對(duì)象解決二義性問(wèn)題,通過(guò)虛函數(shù)解決數(shù)據(jù)冗余問(wèn)題。C++避免多繼承問(wèn)題

  4. 對(duì)于Java 來(lái)說(shuō),它為了避免類的多繼承產(chǎn)生的問(wèn)題,其特性之一是類單繼承,接口多繼承。類的單繼承實(shí)現(xiàn)的重用,接口多繼承中:接口內(nèi)不能包含成員變量和方法實(shí)現(xiàn),避免了二義性和數(shù)據(jù)冗余問(wèn)題。

    盡管如此, Java中仍然可以通過(guò)內(nèi)部類和接口來(lái)實(shí)現(xiàn)多繼承,但是不會(huì)出現(xiàn)二義性問(wèn)題,因?yàn)橛脙?nèi)部類實(shí)現(xiàn)多繼承過(guò)程中由設(shè)計(jì)者重新進(jìn)行函數(shù)命名,從而避免了鉆石危機(jī) Java實(shí)現(xiàn)菱形繼承

    除此之外,Java 8 加入的新的語(yǔ)言特性 : 默認(rèn)方法, default 這個(gè)關(guān)鍵字告訴 javac 用戶真正需要的是為接口添加一個(gè)包含方法體的新方法。(除了添加了一個(gè)新的關(guān)鍵字,默認(rèn)方法在繼承規(guī)則上和普通方法也略有區(qū)別)由于Java中接口允許多重繼承,因此有可能碰到兩個(gè)接口包含簽名相同的默認(rèn)方法的情況,此時(shí)javac并不能明確到底繼承了哪一個(gè)接口中的默認(rèn)方法,因此編譯器就會(huì)報(bào)錯(cuò)。當(dāng)然,在子類中實(shí)現(xiàn)這個(gè)方法就能夠解決編譯錯(cuò)誤。

C++基礎(chǔ)相關(guān)

class 派生類名:[繼承方式] 基類名{
    派生類新增加的成員
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容