多重繼承

多重繼承

多重繼承是程式語言中的概念,多重繼承指的是一個類可以同時繼承多個類,比如A類繼承自B類和C類,這就是多重繼承

基本介紹

  • 中文名:多重繼承
  • 性質:繼承
  • 屬性:多重
  • 單一繼承是指:一個子類只繼承一個父類
定義,概念,對象,方式,

定義

面向對象程式語言中的多重繼承指的是一個類可以同時繼承多個父類的行為和特徵功能。單一繼承是指:一個子類只繼承一個父類。

概念

多重繼承指代可以導致某些令人混淆的情況,所以關於它的好處與風險之間孰輕孰重常常受人爭論。Java使用了一個折衷的辦法:Java允許一個類別繼承自多於一個父接口(可以指定某一個類別,它繼承了所有父類的類型,並必須擁有所有父類別接口的外部可見方法的具體實現,並允許編譯器強制以上要求),但只可以從一個父類別繼承實現(方法數據)。微軟.NET程式語言,例如C#Visual Basic .NET和REAL Software的REALbasic也使用了這種類接口的做法。

對象

面向對象的程式設計中,繼承描述了兩種類型或兩個類的物件,其中一種是另外一種的“子類型”或“子類”。子類繼承了父類的特徵,允許分享功能。例如,可以創造一個“哺乳類動物” 類,擁有進食、繁殖等的功能;然後定義一個子類“貓”,它可以從父類繼承上述功能,不需重新編寫程式,同時增加屬於自己的新功能,例如“追趕老鼠”。
然而,如果想同時自多於一個結構繼承,例如容許“貓”繼承“哺乳類動物”之餘,同時繼承“卡通角色”和“寵物”,缺乏多重繼承往往會導致十分笨拙的混合繼承,或迫使同一個功能在多於一個地方被重寫。(這帶來了維護上的問題)
多年以來,多重繼承都是一個敏感的話題,反對者指它增加了程式的複雜性與含糊性,例如在“鑽石問題”中。

方式

各種程式語言有不同的方式處理上述問題。例如Eiffel容許子類型透過重新命名,或提前為他們確定選擇規則,來適應(adapt)它繼承得來的功能。Java允許對象從多個接口繼承,但僅允許一個實現繼承。REALbasic與它相似,並增加了一個不需使用繼承來“擴展”一個類的功能。Perl使用一種有序列表式的繼承機制:搜尋方法時,它會先搜尋當前類別的方法,然後使用深度優先搜尋來順序尋找各個繼承類及其父類。CLOS允許程式設計者完全控制方法的組合。如果這還不足夠,元對象協定給程式設計者一種手段去修改繼承,方法調度,類別特例化,及其它內部的機制,而不影響系統的穩定性。

相關詞條

熱門詞條

聯絡我們