類繼承和對象組合是複用的兩種最常用的技術。
一:繼承
繼承是is a 的關系,比如說student繼承person,則說明student is a person。繼承的優點是子類可以重寫父類的方法來友善地實作對父類的擴充。
繼承的缺點有以下幾點:
①:父類的内部細節對子類是可見的。
②:子類從父類繼承的方法在編譯時就确定下來了,是以無法在運作期間改變從父類繼承的方法的行為。
③:如果對父類的方法做了修改的話(比如增加了一個參數),則子類的方法必須做出相應的修改。是以說子類與父類是一種高耦合,違背了面向對象思想。
<a></a>
二:組合
組合也就是設計類的時候把要組合的類的對象加入到該類中作為自己的成員變量。
組合的優點:
①:目前對象隻能通過所包含的那個對象去調用其方法,是以所包含的對象的内部細節對目前對象時不可見的。
②:目前對象與包含的對象是一個低耦合關系,如果修改包含對象的類中代碼不需要修改目前對象類的代碼。
③:目前對象可以在運作時動态的綁定所包含的對象。可以通過set方法給所包含對象指派。
組合的缺點:①:容易産生過多的對象。②:為了能組合多個對象,必須仔細對接口進行定義。
由此可見,組合比繼承更具靈活性和穩定性,是以在設計的時候優先使用組合。隻有當下列條件滿足時才考慮使用繼承:
子類是一種特殊的類型,而不隻是父類的一個角色
子類的執行個體不需要變成另一個類的對象
子類擴充,而不是覆寫或者使父類的功能失效