隨筆 - 1, 文章 - 0, 評(píng)論 - 0, 引用 - 0
          數(shù)據(jù)加載中……

          2016年12月27日

          組合與繼承到底有什么區(qū)別?

          2016年12月27日14:45:26
          =====================
          1、在新的class中使用既有的class,這中方法稱(chēng)之為"組合"。但是這種重用方式只是很單純的重復(fù)運(yùn)用以有的代碼功能,而非重復(fù)運(yùn)用其形式。
          2、讓新的class成為既有class的一類(lèi),并且根據(jù)需要加入新的功能,而無(wú)須更動(dòng)原有class,這種方法稱(chēng)之為"繼承"。

          如果B是A的一種 才用繼承

          PS:
          繼承是說(shuō)“我父親在家里給我?guī)土撕艽蟮拿?#8221;。 
          組合是說(shuō)“我請(qǐng)了個(gè)老頭在我家里干活”。 
          太有才了

          組合是在一類(lèi)類(lèi)中引用另一個(gè)類(lèi)。生成另一個(gè)類(lèi)的實(shí)例。 
          而繼承只是繼承了父類(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)編輯 收藏

          主站蜘蛛池模板: 贵港市| 台湾省| 孟村| 邵东县| 尼勒克县| 屯门区| 安丘市| 梅河口市| 汕尾市| 博野县| 阿巴嘎旗| 平安县| 清河县| 清水河县| 新巴尔虎右旗| 阳朔县| 鄂州市| 茶陵县| 唐河县| 咸丰县| 洮南市| 镶黄旗| 布拖县| 无为县| 买车| 和田县| 全南县| 张掖市| 桂林市| 曲阳县| 荔浦县| 翼城县| 津市市| 历史| 穆棱市| 清新县| 蒲江县| 称多县| 迁西县| 大宁县| 泽州县|