c 繼承和組合的區別

2021-09-06 18:49:43 字數 1115 閱讀 3269

1

.什麼是繼承

a繼承b,說明a是b的一種,並且b的所有行為對a都有意義

eg:a=woman b=human

a=鴕鳥 b=鳥 (不行),因為鳥會飛,但是鴕鳥不會。

2.什麼是組合

若在邏輯上a是b的「一部分」(a part of),則不允許b從a派生,而是要用a和其它東西組合出b。

例如眼(eye)、鼻(nose)、口(mouth)、耳(ear)是頭(head)的一部分,所以類head應該由類eye、nose、mouth、ear組合而成,不是派生而成

3.繼承的優點和缺點

優點:

容易進行新的實現,因為其大多數可繼承而來。

易於修改或擴充套件那些被復用的實現。

缺點:

破壞了封裝性,因為這會將父類的實現細節暴露給子類。

「白盒」復用,因為父類的內部細節對於子類而言通常是可見的。

當父類的實現更改時,子類也不得不會隨之更改。

從父類繼承來的實現將不能在執行期間進行改變。

4.組合的優點和缺點

優點:

容器類僅能通過被包含物件的介面來對其進行訪問。

「黑盒」復用,因為被包含物件的內部細節對外是不可見。

封裝性好。

實現上的相互依賴性比較小。(被包含物件與容器物件之間的依賴關係比較少)

每乙個類只專注於一項任務。

通過獲取指向其它的具有相同型別的物件引用,可以在執行期間動態地定義(物件的)組合。

缺點:

導致系統中的物件過多。

為了能將多個不同的物件作為組合塊(composition block)來使用,必須仔細地對介面進行定義。

5.兩者的選擇

is-a關係用繼承表達,has-a關係用組合表達

繼承體現的是一種專門化的概念而組合則是一種組裝的概念

另外確定是組合還是繼承,最清楚的方法之一就是詢問是否需要新類向上對映,也就是說當我們想重用原型別作為新型別的內部實現的話,我們最好自己組合,如果我們不僅想重用內部實現而且還想重用介面的話,那就用繼承。

6.法則:優先使用(物件)組合,而非(類)繼承

個人理解:組合耦合度小,容易擴充套件,繼承耦合度太大了,應該優先使用組合,而非繼承。

C 繼承和組合的區別

1.什麼是繼承 a繼承b,說明a是b的一種,並且b的所有行為對a都有意義 eg a woman b human a 鴕鳥 b 鳥 不行 因為鳥會飛,但是鴕鳥不會。2.什麼是組合 若在邏輯上a是b的 一部分 a part of 則不允許b從a派生,而是要用a和其它東西組合出b。例如眼 eye 鼻 no...

C 繼承與組合的區別

1 繼承與組合 2 繼承和組合的使用場景 3 繼承和組合的區別 4 繼承和組合的優缺點 1 繼承的優缺點 2 組合的優缺點 c 程式開發中,設計孤立的模擬較容易,設計相互關聯的類卻比較難,這其中會涉及兩個概念,乙個是繼承 inheritance 乙個是組合 composition 因為二者有一定的相...

Java繼承和組合的區別

1 組合 has a 關係可以顯式地獲得被包含類 繼承中稱為父類 的物件,而繼承 is a 則是隱式地獲得父類的物件,被包含類和父類對應,而組合外部類和子類對應。2 組合關係在執行期決定,而繼承關係在編譯期就已經決定了。3 組合是在組合類和被包含類之間的一種松耦合關係,而繼承則是父類和子類之間的一種...