本篇擷取重點:
一、繼承(Inheritance)
繼承是一種類別間的階層式分類關係,可用現有類別衍生出新類別。新類別可繼承(延伸)現有類別的屬性和方法。
二、繼承的目的及手段
本篇單就"程式碼再用"的部分做探討,"介面再用"部分筆者還不熟悉就先不討論了...
繼承所導致的程式碼再用,是指衍生類別能自動沿襲基底類別的所有程式碼,好讓你可以不用寫太多程式碼,只需要稍微擴充或修改,就能符合你的需求。
==================================================================
貼心小補充:
請注意,繼承所產生的衍生類別和其基底類別之間,兩者在記憶體內是獨立的。繼承所做的擴充與修改,並不會影響到基底類別。
==================================================================
三、繼承的類別階層
將許多類別之間的繼承關係,繪製成一張關係圖,如果繪製時依循「基底類別在上,衍生類別在下」,或者「基底類別在左,衍生類別在右」,就可以形成一個類別階層(Class Hierarchy)。
由於大多數的類別階層設計都是採用單一繼承(Single Inheritance),而非多重繼承(Multiple Inheritance),所以階層圖往往是樹狀結構,符合樹狀結構的階層圖,也稱為繼承樹、類別樹。
==================================================================
貼心小補充:
多重繼承與介面
單一繼承指的是,只有一個基底類別;多重繼承指的是,具有多個基底類別。應用框架設計幾乎都是採用單一繼承(例如MFC、.NET Framework、Borland VCL、AIR),只有極少數以前的設計會採用多重繼承(例如Borland OWL)。
不僅如此,連語言本身的設計上,也往往禁止多重繼承(例如Java、Delphi、C#、VB.NET),只剩下極少數語言允許多重繼承(例如C++、Eiffel)。這個趨勢似乎會延續下去,主要是因為多重繼承「可能」會造成「不知道繼承的方法,是來自那個基底類別或祖先類別的困擾」。
==================================================================
四、其他和繼承相關的問題
繼承在某些程度上破壞了一部分的封裝,造成衍生類別和基底類別的相依程度提高。基底類別如果改變,但是衍生類別沒有跟著做出改變,可能會造成衍生類別出問題。
法律上有所謂的「限定繼承」與「拋棄繼承」,目前的編程語言似乎都沒有這樣的概念,就算有,權力也是放在基底類別上,而不是在衍生類別上。
參考資料:
https://www.ithome.com.tw/node/46085 (大推薦)
建議介面這兩個字再定義清楚一點,否則有點難分辨是使用者介面 (user interface) 還是一般在OOP所說的介面 (interface)。
感謝小朱大大的熱心回應,不過,我發現介面對目前的我來說有點深,在自己還不熟悉的狀況下,應該不要誤人子弟XDD,所以決定先把這篇關於介面的部分刪除...
介面是實作(implement)不是繼承(Inheritance)
所以當然不被限制只能一個
interface翻接口可能好點
設計繼承時,必須先考慮介面是否共享,而後考慮程式碼是否共享,再考慮分類。但是經驗不足的編程員,反倒會先考慮分類和程式碼再用,而忽略了「介面再用」是其中最重要的事。
還有interface不是這樣用的.....
感謝sion大大的熱心回應,看完您的回覆讓我發現自己的誤解,而且距離真相還有一大段距離XDD,所以決定先把這篇關於介面的部分刪除,等未來足夠理解時再來探討這個部分...