組合(has-a)關係可以顯式地獲得被包含類(繼承中稱為父類)的物件,而繼承(is-a)則是隱式地獲得父類的物件,被包含類和父類對應,而組合外部類和子類對應。2)組合關係在執行期決定,而繼承關係在編譯期就已經決定了。
3)組合是在組合類和被包含類之間的一種松耦合關係,而繼承則是父類和子類之間的一種緊耦合關係。
4)當選擇使用組合關係時,在組合類中包含了外部類的物件,組合類可以呼叫外部類必須的方法,而使用繼承關係時,父類的所有方法和變數都被子類無條件繼承,子類不能選擇。
5)最重要的一點,使用繼承關係時,可以實現型別的回溯,即用父類變數引用子類物件,這樣便可以實現多型,而組合沒有這個特性。
6)還有一點需要注意,如果你確定復用另外乙個類的方法永遠不需要改變時,應該使用組合,因為組合只是簡單地復用被包含類的介面,而繼承除了復用父類的介面外,它甚至還可以覆蓋這些介面,修改父類介面的預設實現,這個特性是組合所不具有的。
7)從邏輯上看,組合最主要地體現的是一種整體和部分的思想,例如在電腦類是由記憶體類,cpu類,硬碟類等等組成的,而繼承則體現的是一種可以回溯的父子關係,子類也是父類的乙個物件。
引用網友的一句很經典的話應該更能讓大家分清繼承和組合的區別:組合可以被說成「。我請了個老頭在我家裡幹活」 ,繼承則是「我父親在家裡幫我幹活"
設計模式之美筆記 組合 與 繼承 差異
設計模式之美 10 物件導向程式設計中,經典的設計原則 組合優於繼承,多用組合少用繼承。問題 繼承 可以解決 復用問題。偏重於從屬關係。繼承存在的問題 所有的鳥都繼承鳥類的父類,父類中有乙個fly的方法,但是對於鴕鳥,企鵝這類鳥類,就不應該存在fly這個方法。因為對於不會飛的鳥類,繼承鳥類的父類,一...
繼承與組合
題目描述 已知類如下 1 birthdate 生日類 含有 year,month,day 等資料成員 2 teacher 教師類 含有 num,name,等資料成員 3 professor 教授類 含有 教師類和生日類的資料成員 要求 1 通過對teacher和birthdate使用繼承和組合的方式...
繼承與組合
繼承與組合 繼承是實現類重用的重要手段,但繼承有乙個最大的壞處 就是破壞封裝,相比之下,組合也是實現類重用的重要方式,而採用組合方式來實現類重用則能提供更好的封裝性。繼承特點 繼承子類擴充套件,得到父類的屬性和方法。許可權允許的情況,子類可以直接訪問父類的屬性和方法,極大的破壞了封裝的特性 從而造成...