組合與繼承的區別

2021-07-22 10:40:57 字數 370 閱讀 7101

組合和繼承都允許在新的類中設定子物件,只是組合是顯式的,繼承是隱式的。

繼承關係:「is -a」關係

組合關係:「has -a」關係

例如:car表示汽車物件,vehicle表示交通工具物件,tire表示輪胎物件

如何選擇(兩大原則):

不要單純地為了實現**的重用而使用繼承,除非兩個類是「is -a」的關係,否則不要輕易使用繼承,因為過多使用繼承會破壞**的可維護性,父類修改會影響到所有繼承它的子類,增加維護成本和難度

不要僅僅為了實現多型而使用繼承,類之間沒有「is -a」的關係,可以通過實現介面與組合的方式來達到相同的目的。介面與組合的方式比採用繼承的方式具有更好的可擴充套件性

所以能使用組合就盡量不要使用繼承

Java 繼承與組合的區別

根據網路上大家對繼承和組合的討論,我簡單總結以下幾點 1 組合 has a 關係可以顯式地獲得被包含類 繼承中稱為父類 的物件,而繼承 is a 則是隱式地獲得父類的物件,被包含類和父類對應,而組合外部類和子類對應。2 組合關係在執行期決定,而繼承關係在編譯期就已經決定了。3 組合是在組合類和被包含...

Java 組合與繼承的區別

組合和繼承都允許在新的類中放置子物件,組合是顯式地這樣做,而繼承是隱式地做。那兩者之間的區別是怎樣的呢?又該如何選擇呢?很多人對組合理解地還不是很好,所以我們先來理解一下組合 組合技術通常用於想在新類中使用現有類的功能而非它的介面這種情況。以car物件舉例 composition with publ...

Java 繼承與組合的區別

根據網路上大家對繼承和組合的討論,我簡單總結以下幾點 1 組合 has a 關係可以顯式地獲得被包含類 繼承中稱為父類 的物件,而繼承 is a 則是隱式地獲得父類的物件,被包含類和父類對應,而組合外部類和子類對應。2 組合關係在執行期決定,而繼承關係在編譯期就已經決定了。3 組合是在組合類和被包含...