來(lái)源:衡水北大青鳥(niǎo) ????發(fā)布時(shí)間:2017-04-11 10:49 ????點(diǎn)擊:
繼承指的是一個(gè)類(lèi)(稱(chēng)為子類(lèi)、子接口)繼承另外的一個(gè)類(lèi)(稱(chēng)為父類(lèi)、父接口)的功能,并可以增加它自己的新功能的能力。
繼承是is-a的關(guān)系,是一種用于表示特殊與一般的關(guān)系。
如果說(shuō)XXX是XXX,沒(méi)人鄙視你的話(huà),繼承關(guān)系就成立了,如:
男人是人,說(shuō)得通。
要是反過(guò)來(lái),人是男人,這世界就亂了。
指的是一個(gè)類(lèi)實(shí)現(xiàn)接口的功能。
簡(jiǎn)單的理解,就是類(lèi)A使用到了類(lèi)B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是類(lèi)B的變化會(huì)影響到類(lèi)A。
比如某人要過(guò)河,需要借用一條船,此時(shí)人與船之間的關(guān)系就是依賴(lài)。
表現(xiàn)在代碼層面,為類(lèi)B作為參數(shù)被類(lèi)A在某個(gè)方法中使用。如:
關(guān)聯(lián)體現(xiàn)的是兩個(gè)類(lèi),或者類(lèi)與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴(lài)關(guān)系,比如我和我的朋友。這種關(guān)系比依賴(lài)更強(qiáng),不存在依賴(lài)關(guān)系的偶然性,關(guān)系也不是臨時(shí)性的,一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的,關(guān)聯(lián)可以是單向或者雙向的。表現(xiàn)在代碼層面,為被關(guān)聯(lián)類(lèi)B以類(lèi)屬性的形式出現(xiàn)在關(guān)聯(lián)類(lèi)A中,也可能是關(guān)聯(lián)類(lèi)A引用了一個(gè)類(lèi)型為被關(guān)聯(lián)類(lèi)B的全局變量。
聚集是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是整體與部分,是擁有的關(guān)系,即has-a的關(guān)系。
此時(shí)整體與部分之間是可分離的,它們可以具有各自的生命周期,部分可以屬于多個(gè)整體的對(duì)象,也可以為多個(gè)整體對(duì)象共享,比如球員與球隊(duì)、教練與球隊(duì)的關(guān)系。
表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。
怎么理解呢?
所謂整體與部分,小貝是球隊(duì)A人一部分,沒(méi)錯(cuò)吧。
但同時(shí),小貝是不是也可以是其它球隊(duì)或機(jī)構(gòu)的一分子呢?答案是肯定的。
組合也是關(guān)聯(lián)關(guān)系的一種特例,它體現(xiàn)的是一種contains-a的關(guān)系,這種關(guān)系比聚合更強(qiáng),也稱(chēng)為強(qiáng)聚合。
它同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束,比如小貝和他的飛毛腿。表現(xiàn)在代碼層面,和關(guān)聯(lián)關(guān)系是一致的,只能從語(yǔ)義級(jí)別來(lái)區(qū)分。
聚合,XXX是XXX的一部分。
組合,XXX是XXX必不可少的一部分,是聚合的加強(qiáng)版。
對(duì)于繼承、實(shí)現(xiàn)這兩種關(guān)系沒(méi)多少疑問(wèn),它們體現(xiàn)的是一種類(lèi)與類(lèi),或者類(lèi)與接口間的縱向關(guān)系。
其它的四者關(guān)系則體現(xiàn)的是類(lèi)與類(lèi),或者類(lèi)與接口間的引用,是橫向關(guān)系,是比較難區(qū)分的。有很多事物間的關(guān)系要想準(zhǔn)備定位是很難的,前面也提到,這幾種關(guān)系都是語(yǔ)義級(jí)別的,所以從代碼層面并不能完全區(qū)分各種關(guān)系。
但總的來(lái)說(shuō),后幾種關(guān)系所表現(xiàn)的強(qiáng)弱程度依次為:組合>聚合>關(guān)聯(lián)>依賴(lài)。