組合與繼承的比較

2021-09-11 19:08:58 字數 661 閱讀 9988

類繼承:白盒復用,父類的內部實現細節對子類可見

組合:黑盒復用,物件的內部細節不可見

類繼承在編譯時刻靜態定義。且可直接使用。乙個子類重新定義一些而不是父類的全部操縱

類繼承不足:

1.因為繼承在編譯時刻就定義好。所以無法在執行時改變從父類繼承的實現。

2.更糟糕的是,父類至少定義了部分子類的具體表示,因為繼承對子類揭示了其父類的實現,所以破壞了封裝性。

3。且子類與父類依賴關係緊密。以至於父類的任何改變必然導致子類的變化

4.最後如果繼承的實現不適合解決新問題。父類可能重寫或者被其他類替代。這種方式限制的復用性。

上述不足的解決方式----繼承抽象

組合:對其他物件的引用是在執行時刻定義。

1.物件只能通過介面訪問。所以不破壞封裝性

2.只要型別一致。乙個物件可以用另乙個物件代替。

3.物件的實現基於介面,所以實現上存在較少的依賴關係。

4物件組合對系統設計還有另乙個作用。即優先使用物件組合有助於幫你保持每個類被封裝,並集中在單個任務上。這樣類和類繼承層次會保持較小規模,並且不太可能增長為不可控制的龐然大物。另一方面,基於物件組合的設計會有更多的物件(而有較少的類),且系統的行為將依賴與物件間的關係而不是被定義在某個類中

來自:《head first設計模式(中文版)》 和 《gof設計模式》

繼承和組合的比較

繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...

繼承和組合的比較

繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...

繼承與組合

題目描述 已知類如下 1 birthdate 生日類 含有 year,month,day 等資料成員 2 teacher 教師類 含有 num,name,等資料成員 3 professor 教授類 含有 教師類和生日類的資料成員 要求 1 通過對teacher和birthdate使用繼承和組合的方式...