1. 程式人生 > >閱讀隨筆之組合與繼承

閱讀隨筆之組合與繼承

組合:(has-a)將一個物件的引用置於新的物件中。(這是我自己的解釋,不是專業術語)

繼承:(is-a)繼承不是複製基類的介面,當你建立一個匯出類的物件時,該物件包含了一個基類的子物件。這個子物件與你直接建立物件是一樣的。二者的區別在於,後者來自於外部,而基類的子物件被包裝在匯出類物件內部。

閱讀上面倆應該已經可以看出一點了,組合是來自於外部,而繼承過來的則包裝在你的匯出類內部。但還是有些模糊。

組合通常用於想在新類中使用現有類的功能。

在繼承的時候使用現有類,並開發一個他的通用版本,通常你使用一個通用類(幾何形)將其特殊話(三角形,正方形),也就是java多型的表現。

上面兩句話簡單來說就是(is-a)是一個的時候用繼承,(has-a)有一個的時候用組合。

一個最清晰的判斷是不是需要用到繼承就是問下自己需不需要從新類向基類進行向上轉型,如果必須要向上轉型,則繼承是必須的,如果不需要,則自己需要好好考慮下

繼承和組合都能從現有型別生成一個新的型別。組合一般是將現有型別作為新型別底層實現的一部分加以複用,而繼承複用的是介面。能用組合就儘量不要用繼承,組合更加靈活點。

 

 

我的簡單理解,歡迎各位大牛評論區糾正和補充