2016年12月27日14:45:26
=====================
1、在新的class中使用既有的class,這中方法稱之為"組合"。但是這種重用方式只是很單純的重復運用以有的代碼功能,而非重復運用其形式。
2、讓新的class成為既有class的一類,并且根據需要加入新的功能,而無須更動原有class,這種方法稱之為"繼承"。
如果B是A的一種 才用繼承
PS:
繼承是說“我父親在家里給我幫了很大的忙”。
組合是說“我請了個老頭在我家里干活”。
太有才了
組合是在一類類中引用另一個類。生成另一個類的實例。
而繼承只是繼承了父類的變量和方法。
區別:
使用組合可以用到另一個類中私有的變量和方法,而繼承就不可以用到父類的私有的變量和方法了
他們都有各自的好處,要靈活的運用。
類繼承與對象組合是實現類復用的兩種最常用的技術。
一:繼承
繼承是Is a 的關系,比如說Student繼承Person,則說明Student is a Person。繼承的優點是子類可以重寫父類的方法來方便地實現對父類的擴展。
繼承的缺點有以下幾點:
1:父類的內部細節對子類是可見的。
2:子類從父類繼承的方法在編譯時就確定下來了,所以無法在運行期間改變從父類繼承的方法的行為。
3:子類與父類是一種高耦合,違背了面向對象思想。
4 :繼承關系最大的弱點是打破了封裝,子類能夠訪問父類的實現細節,子類與父類之間緊密耦合,子類缺乏獨立性,從而影響了子類的可維護性。
5:不支持動態繼承。在運行時,子類無法選擇不同的父類。
二:組合
1:不破壞封裝,整體類與局部類之間松耦合,彼此相對獨立。
2:具有較好的可擴展性。
3:支持動態組合。在運行時,整體對象可以選擇不同類型的局部對象。
組合是has a的關系
繼承是is a的關系
引用一句老話應該更能分清繼承和組合的區別:組合可以被說成“我請了個老頭在我家里干活” ,繼承則是“我父親在家里幫我干活"。
總結
1.除非考慮使用多態,否則優先使用組合。
2.要實現類似”多重繼承“的設計的時候,使用組合。
3.要考慮多態又要考慮實現“多重繼承”的時候,使用組合+接口。