Java學習10 繼承VS組合

2021-08-13 11:45:14 字數 934 閱讀 9509

之前我們說過繼承可以通過組合來實現,這裡我們來**兩者的區別和用法。

繼承的主要作用:

組合的主要作用:

如果僅僅從復用的角度思考,組合完全可以代替繼承。並且組合比繼承更靈活。

下面我們把如下繼承**通過組合實現:

繼承**:鳥類繼承父類

public

class

animal

void eat()

}class

birds

extends

animal

@override

void eat()

void fly()

}

呼叫**test類

class test 

}

通過組合實現同樣功能:

/**

* 測試組合

* *@author arvin

* */

public

class

animal

void eat()

}class birds

void eat()

void fly()

}

呼叫**test類:

public

class test

}

可見,通過組合同樣可以實現繼承的功能,而且,組合可以使用多個類的物件,類似於多繼承,因而更加靈活。

但是,從理解的角度來看,

繼承是「is a」的概念,即:鳥是動物,因而使用繼承更加合理。

組合是「has a」的概念,即:鳥有羽毛,則使用組合更加合理,而使用繼承就會變成羽毛繼承鳥,不合理。

組合vs繼承

1 通過children 傳遞dom children屬性將子元素直接傳遞到輸出。function fancyborder props function welcomedialog jsx 標籤內的任何內容都將通過children屬性傳入fancyborder。由於fancyborder在乙個內渲染...

java 組合優於繼承

組合和繼承,都能實現對類的擴充套件。區別如下表所示 組合 繼承has a關係 is a關係 執行期決定 編譯期決定 不破壞封裝,整體和區域性松耦合 破壞封裝,子類依賴父類 支援擴充套件,隨意增加組合類 只能繼承乙個父類,必須包含所有方法,增加系統複雜性 動態選擇組合類方法 復用父類方法 下面通過乙個...

java 繼承和組合

1.is a 是乙個 的關係是用繼承來表述 2.has a 有乙個 的關係是用組合來表述 3.組合語法 組合技術通常用於想在新類中使用現有累的功能而非它的介面的情況下。即在新類中放入某個類的物件,讓其實現所需要的功能,但是新類的使用者看到的只是為新類所定義的介面,而非嵌入類物件的介面。其實組合在編碼...