Chapter 02 復合 VS 繼承

2022-04-06 03:08:20 字數 733 閱讀 6180

復合優先於繼承,繼承是實現**重用的有力手段,並不是所有情況都適用,使用不當會導致軟體變得很脆弱。與方法呼叫不同的是,繼承打破了封裝性。

總而言之,組合和繼承,都能實現對類的擴充套件。但是要分具體情況用哪個實現,是has-a,還是is-a的關係。

兩者區別如下表所示:

組合 繼承

has-a關係

is-a關係

執行期決定

編譯期決定

不破壞封裝,整體和區域性松耦合

破壞封裝,子類依賴父類

支援擴充套件,隨意增加組合類

只能繼承乙個父類,必須包含所有方法,增加系統複雜性

動態選擇組合類方法

復用父類方法

來自 :

decorator模式對組合的應用是最經典詮釋:

上碼

public ice(product product)   

public double money()

}

//加奶:

class milk implements product

public double money()

}

//加巧克力:

class chocolate implements product

public double money()

} public class decoratormodel

} 來自

Chapter 02 復合 VS 繼承

復合優先於繼承,繼承是實現 重用的有力手段,並不是所有情況都適用,使用不當會導致軟體變得很脆弱。與方法呼叫不同的是,繼承打破了封裝性。總而言之,組合和繼承,都能實現對類的擴充套件。但是要分具體情況用哪個實現,是has a,還是is a的關係。兩者區別如下表所示 組合 繼承 has a關係 is a關...

chapter 02 網路程式設計

1 建立tcp ip套接字 tcpsock socket.socket socket.af inet,socket.sock stream 2 建立udp ip套接字 tcpsock socket.socket socket.af inet,socket.sock stream 2 建立tcp伺服器...

Chapter02 第四節 函式

函式定義 函式原型 函式呼叫 函式定義即定義乙個函式 形如 double sqrt double x 函式呼叫即呼叫這個函式,形如 double value sqrt x 函式原型即函式宣告,如double sqrt double 編譯系統要求先編譯函式,再呼叫函式。也就是定義要放在函式之前。但是不...