組合與繼承到底有什么區(qū)別?
2、讓新的class成為既有class的一類(lèi),并且根據(jù)需要加入新的功能,而無(wú)須更動(dòng)原有class,這種方法稱(chēng)之為"繼承"。
如果B是A的一種 才用繼承
組合是說(shuō)“我請(qǐng)了個(gè)老頭在我家里干活”。
太有才了
而繼承只是繼承了父類(lèi)的變量和方法。
區(qū)別:
使用組合可以用到另一個(gè)類(lèi)中私有的變量和方法,而繼承就不可以用到父類(lèi)的私有的變量和方法了
他們都有各自的好處,要靈活的運(yùn)用。
類(lèi)繼承與對(duì)象組合是實(shí)現(xiàn)類(lèi)復(fù)用的兩種最常用的技術(shù)。
一:繼承
繼承是Is a 的關(guān)系,比如說(shuō)Student繼承Person,則說(shuō)明Student is a Person。繼承的優(yōu)點(diǎn)是子類(lèi)可以重寫(xiě)父類(lèi)的方法來(lái)方便地實(shí)現(xiàn)對(duì)父類(lèi)的擴(kuò)展。
繼承的缺點(diǎn)有以下幾點(diǎn):
1:父類(lèi)的內(nèi)部細(xì)節(jié)對(duì)子類(lèi)是可見(jiàn)的。
2:子類(lèi)從父類(lèi)繼承的方法在編譯時(shí)就確定下來(lái)了,所以無(wú)法在運(yùn)行期間改變從父類(lèi)繼承的方法的行為。
3:子類(lèi)與父類(lèi)是一種高耦合,違背了面向?qū)ο笏枷搿?/font>
4 :繼承關(guān)系最大的弱點(diǎn)是打破了封裝,子類(lèi)能夠訪(fǎng)問(wèn)父類(lèi)的實(shí)現(xiàn)細(xì)節(jié),子類(lèi)與父類(lèi)之間緊密耦合,子類(lèi)缺乏獨(dú)立性,從而影響了子類(lèi)的可維護(hù)性。
5:不支持動(dòng)態(tài)繼承。在運(yùn)行時(shí),子類(lèi)無(wú)法選擇不同的父類(lèi)。
二:組合
1:不破壞封裝,整體類(lèi)與局部類(lèi)之間松耦合,彼此相對(duì)獨(dú)立。
2:具有較好的可擴(kuò)展性。
3:支持動(dòng)態(tài)組合。在運(yùn)行時(shí),整體對(duì)象可以選擇不同類(lèi)型的局部對(duì)象。
組合是has a的關(guān)系
繼承是is a的關(guān)系
引用一句老話(huà)應(yīng)該更能分清繼承和組合的區(qū)別:組合可以被說(shuō)成“我請(qǐng)了個(gè)老頭在我家里干活” ,繼承則是“我父親在家里幫我干活"。
總結(jié)
1.除非考慮使用多態(tài),否則優(yōu)先使用組合。
2.要實(shí)現(xiàn)類(lèi)似”多重繼承“的設(shè)計(jì)的時(shí)候,使用組合。
3.要考慮多態(tài)又要考慮實(shí)現(xiàn)“多重繼承”的時(shí)候,使用組合+接口。
posted @ 2016-12-27 15:27 zyuan1991 閱讀(250) | 評(píng)論 (0) | 編輯 收藏