繼承和組合

2021-05-22 01:23:46 字數 665 閱讀 6942

繼承是一種白箱復用,父類的內部細節對子類可見。

物件組合彼此不知道對方內部細節,成為黑箱復用。

繼承的優缺點:

1)  子類可以直接重定義父類的操作。

2)  編譯時刻決定了,無法在執行期間更改。

3)  子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程中遇到過類似的問題。這種依賴,限制了靈活性以及復用性。比如,服務體系中經常出現這樣的問題,導致**拷貝。

組合(通過獲得物件的引用而在執行時刻動態的定義)的優缺點:

1)  物件間通過介面彼此互動。

2)  物件只能通過介面訪問,不要也不能知道對方細節,這樣不會破壞封裝性。

3)  執行時刻可以使用另外乙個物件替換這個物件,提高了靈活性。

4)  物件的實現基於介面編寫,所以實現上存在較少的依賴關係。

5)  優先使用組合有助於保持每個類被封裝,並被集中在單個任務上,提高整體內聚性。類和類的層次都維持乙個較小的規模,

6)  基於物件組合的設計會有更多的物件(而又較少的類),且系統的行為依賴於物件間的關係而不是定義在某個類的內部。

理想的情況下,應該通過組合原有構件實現新的功能,而不是建立新的構件。

物件導向設計的第二個原則:優先使用物件組合,而不是類繼承。

組合繼承和寄生式組合繼承

組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...

繼承和組合

1.相同點 二者都是實現類重用的重要方式。2.不同點 繼承會破壞封裝性。例 class a public void breath class b extends a class c extends a 則b,c物件則能夠訪問a中的public方法和屬性,在一定程度上破壞了類的封裝性。使用組合的方法如...

繼承和組合

組合和繼承是物件導向中兩種 復用的方式。組合是指在新類裡面建立原有類的物件,重複利用已有類的功能。繼承是物件導向的主要特性之一,它允許設計人員根據其它類的實現來定義乙個類的實現。組合和繼承都允許在新的類中設定 子物件 subobject 只是組合是顯式的,而繼承則是隱式的。組合和繼承存在著對應關係 ...