繼承和組合

2021-06-19 00:12:14 字數 635 閱讀 2984

1.相同點:二者都是實現類重用的重要方式。

2.不同點:繼承會破壞封裝性。

例:

class a 

public void breath(){}

}class b extends a

}class c extends a

}

則b,c物件則能夠訪問a中的public方法和屬性,在一定程度上破壞了類的封裝性。

使用組合的方法如下:

class a 

public void breath(){}

}class b

public b(a a)

public void breath()//實現復用}

}class c

public void breath()

}
3.何時用繼承,何時用組合?

繼承是對已有的類進行改造,父類中主要是包含通用的屬性和方法,獲得的子類是乙個特殊版本的類,將具有明顯繼承關係的兩個類使用繼承,比如動物和狗,狗不是由動物組成的,而狗可以繼承動物的通用屬性和方法,則使用繼承比較合適。

如果為人和腿的話,則明顯腿是人的組成部分,使用組合比較合適。

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

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

繼承和組合

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

繼承和組合

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