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