1.相同點:二者都是實現類重用的重要方式。
2.不同點:繼承會破壞封裝性。
例:
則b,c物件則能夠訪問a中的public方法和屬性,在一定程度上破壞了類的封裝性。class a
public void breath(){}
}class b extends a
}class c extends a
}
使用組合的方法如下:
class a
public void breath(){}
}class b
public b(a a)
public void breath()//實現復用}
}class c
public void breath()
}
3.何時用繼承,何時用組合?
繼承是對已有的類進行改造,父類中主要是包含通用的屬性和方法,獲得的子類是乙個特殊版本的類,將具有明顯繼承關係的兩個類使用繼承,比如動物和狗,狗不是由動物組成的,而狗可以繼承動物的通用屬性和方法,則使用繼承比較合適。
如果為人和腿的話,則明顯腿是人的組成部分,使用組合比較合適。
組合繼承和寄生式組合繼承
組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...
繼承和組合
繼承是一種白箱復用,父類的內部細節對子類可見。物件組合彼此不知道對方內部細節,成為黑箱復用。繼承的優缺點 1 子類可以直接重定義父類的操作。2 編譯時刻決定了,無法在執行期間更改。3 子類要知道父類的實現細節,這樣就部分破壞了封裝性。子類和父類依賴過於緊密,父類的某些變化必然導致子類的變化。開發過程...
繼承和組合
組合和繼承是物件導向中兩種 復用的方式。組合是指在新類裡面建立原有類的物件,重複利用已有類的功能。繼承是物件導向的主要特性之一,它允許設計人員根據其它類的實現來定義乙個類的實現。組合和繼承都允許在新的類中設定 子物件 subobject 只是組合是顯式的,而繼承則是隱式的。組合和繼承存在著對應關係 ...