類繼承和物件組合是復用的兩種最常用的技術。
一:繼承
繼承是is a 的關係,比如說cstudent繼承person,則說明student is a person。繼承的優點是子類可以重寫父類的方法來方便地實現對父類的擴充套件。
繼承的缺點有以下幾點:
①:父類的內部細節對子類是可見的。
②:子類從父類繼承的方法在編譯時就確定下來了,所以無法在執行期間改變從父類繼承的方法的行為。
③:如果對父類的方法做了修改的話(比如增加了乙個引數),則子類的方法必須做出相應的修改。所以說子類與父類是一種高耦合,違背了物件導向思想。
二:組合
組合也就是設計類的時候把要組合的類的物件加入到該類中作為自己的成員變數。
組合的優點:
①:當前物件只能通過所包含的那個物件去呼叫其方法,所以所包含的物件的內部細節對當前物件時不可見的。
②:當前物件與包含的物件是乙個低耦合關係,如果修改包含物件的類中**不需要修改當前物件類的**。
③:當前物件可以在執行時動態的繫結所包含的物件。可以通過set方法給所包含物件賦值。
組合的缺點:①:容易產生過多的物件。②:為了能組合多個物件,必須仔細對介面進行定義。
由此可見,組合比繼承更具靈活性和穩定性,所以在設計的時候優先使用組合。只有當下列條件滿足時才考慮使用繼承:
組合繼承和寄生式組合繼承
組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...
繼承和組合
繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...
繼承和組合
1.相同點 二者都是實現類重用的重要方式。2.不同點 繼承會破壞封裝性。例 class a public void breath class b extends a class c extends a 則b,c物件則能夠訪問a中的public方法和屬性,在一定程度上破壞了類的封裝性。使用組合的方法如...