參考
C++多繼承有什么壞處,Java的接口為什么可以擯棄這些壞處?
C++多繼承(鉆石繼承)的問(wèn)題和解決
C++繼承與java繼承的區(qū)別
總結(jié)
設(shè)計(jì)繼承的主要原因是為了重用,它是提升軟件開(kāi)發(fā)效率的主要因素之一 繼承機(jī)制
多繼承存在缺陷,主要原因是多繼承的使用會(huì)產(chǎn)生
diamond problem/鉆石危機(jī)/菱形繼承. C++和Java 都存在多繼承的問(wèn)題對(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)題-
對(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)
C++函數(shù)的重載的規(guī)則:
函數(shù)名稱必須相同。
參數(shù)列表必須不同(個(gè)數(shù)不同、類型不同、參數(shù)排列順序不同等)。
函數(shù)的返回類型可以相同也可以不相同。
僅僅返回類型不同不足以成為函數(shù)的重載。C++ 類的繼承語(yǔ)法
class 派生類名:[繼承方式] 基類名{
派生類新增加的成員
}