国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

java中類與類之間的關(guān)系

2019-11-06 08:04:27
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

繼承(泛化)、實(shí)現(xiàn)、依賴、關(guān)聯(lián)、聚合、組合的聯(lián)系與區(qū)別

1.在UML類圖中的表示符號(hào):

這里寫圖片描述

2.具體區(qū)別與聯(lián)系

1>繼承/泛化(Generalization)

  【泛化關(guān)系】:是一種繼承關(guān)系,表示一般與特殊的關(guān)系,它指定了子類如何獲得父類的所有特征和行為。在java中此類關(guān)系通過(guò)關(guān)鍵字extends明確標(biāo)識(shí)。    關(guān)系圖如下: 這里寫圖片描述

2>實(shí)現(xiàn)(Realization)

  【實(shí)現(xiàn)關(guān)系】:是一種類與接口的關(guān)系,表示類是接口所有特征和行為的實(shí)現(xiàn). 一個(gè)class類實(shí)現(xiàn)interface接口(可以是多個(gè))的功能,在Java中此類關(guān)系通過(guò)關(guān)鍵字implements明確標(biāo)識(shí)。

關(guān)系圖如下: 這里寫圖片描述

3>依賴(Dependency)

  【依賴關(guān)系】:是一種使用的關(guān)系,即一個(gè)類的實(shí)現(xiàn)需要另一個(gè)類的協(xié)助,所以要盡量不使用雙向的互相依賴. 一個(gè)類A使用到了另一個(gè)類B,而這種使用關(guān)系是具有偶然性的、臨時(shí)性的、非常弱的,但是B類的變化會(huì)影響到A。在java中的代碼表現(xiàn)為局部變量、方法的參數(shù)或者對(duì)靜態(tài)方法的調(diào)用。    關(guān)系圖如下:

這里寫圖片描述

4>關(guān)聯(lián)(Association)

【關(guān)聯(lián)關(guān)系】:是類與類之間的聯(lián)接,它使一個(gè)類知道另一個(gè)類的屬性和方法。兩個(gè)類或者類與接口之間語(yǔ)義級(jí)別的一種強(qiáng)依賴關(guān)系,這種關(guān)系比依賴更強(qiáng),一般是長(zhǎng)期性的,而且雙方的關(guān)系一般是平等的。

關(guān)系圖如下:

這里寫圖片描述 5>聚合(Aggregation)   【聚合關(guān)系】:關(guān)聯(lián)關(guān)系的一種特例, 是強(qiáng)的關(guān)聯(lián)關(guān)系. 聚合是整體與部分的關(guān)系,且部分可以離開(kāi)整體而單獨(dú)存在,他們可以具有各自的生命周期,部分可以屬于多個(gè)整體對(duì)象,也可以為多個(gè)整體對(duì)象共享。

聚合關(guān)系也是使用實(shí)例變量實(shí)現(xiàn)的. 從java 語(yǔ)法上是分不出關(guān)聯(lián)和聚合的. 關(guān)聯(lián)關(guān)系中兩個(gè)類是處于相同的層次, 而聚合關(guān)系中兩不類是處于不平等的層次, 一個(gè)表示整體, 一個(gè)表示部分,在java中的代碼體現(xiàn)為成員變量/全局變量。

關(guān)系圖如下: 這里寫圖片描述 6>組合(Composition)   【組合關(guān)系】:也是關(guān)聯(lián)關(guān)系的一種特例,是比聚合關(guān)系還要強(qiáng)的關(guān)系,也稱為強(qiáng)聚合;他同樣體現(xiàn)整體與部分間的關(guān)系,但此時(shí)整體與部分是不可分的,整體的生命周期結(jié)束也就意味著部分的生命周期結(jié)束。 組合跟聚合幾乎相同,唯一的區(qū)別就是”部分”不能脫離”整體”單獨(dú)存在,就是說(shuō),”部分”的生命期不能比”整體”還要長(zhǎng)。在java中的代碼體現(xiàn)為成員變量/全局變量。

關(guān)系圖如下: 這里寫圖片描述 以上幾種關(guān)系的強(qiáng)弱順序: 泛化=實(shí)現(xiàn)>組合>聚合>關(guān)聯(lián)>依賴 關(guān)系圖如下: 這里寫圖片描述

3、具體的代碼實(shí)現(xiàn)

*依賴關(guān)系比較好區(qū)分,它是耦合度最弱的一種,在java中表現(xiàn)為局域變量、方法的形參,或者對(duì)靜態(tài)方法的調(diào)用,如下面的例子:Driver類依賴于Car類,Driver的三個(gè)方法分別演示了依賴關(guān)系的三種不同形式。

class Car { public static void run(){ System.out.關(guān)聯(lián)關(guān)系在java中一般使用成員變量來(lái)實(shí)現(xiàn),有時(shí)也用方法形參的形式實(shí)現(xiàn)。依然使用Driver和Car的例子,使用方法參數(shù)形式可以表示依賴關(guān)系,也可以表示關(guān)聯(lián)關(guān)系,畢竟我們無(wú)法在程序中太準(zhǔn)確的表達(dá)語(yǔ)義。在本例中,使用成員變量表達(dá)這個(gè)意思:車是我自己的車,我“擁有”這個(gè)車。使用方法參數(shù)表達(dá):車不是我的,我只是個(gè)司機(jī),別人給我什么車我就開(kāi)什么車,我使用這個(gè)車。

class Driver { //使用成員變量形式實(shí)現(xiàn)關(guān)聯(lián) Car mycar; public void drive(){ mycar.run(); } ... //使用方法參數(shù)形式實(shí)現(xiàn)關(guān)聯(lián) public void drive(Car car){ car.run(); } }

聚合關(guān)系是是一種比較強(qiáng)的關(guān)聯(lián)關(guān)系,java中一般使用成員變量形式實(shí)現(xiàn)。對(duì)象之間存在著整體與部分的關(guān)系。例如上例中

class Driver { //使用成員變量形式實(shí)現(xiàn)聚合關(guān)系 Car mycar; public void drive(){ mycar.run(); } }

假如給上面代碼賦予如下語(yǔ)義:車是一輛私家車,是司機(jī)財(cái)產(chǎn)的一部分。則相同的代碼即表示聚合關(guān)系了。聚合關(guān)系一般使用setter方法給成員變量賦值。

假如賦予如下語(yǔ)義:車是司機(jī)的必須有的財(cái)產(chǎn),要想成為一個(gè)司機(jī)必須要先有輛車,車要是沒(méi)了,司機(jī)也不想活了。而且司機(jī)要是不干司機(jī)了,這個(gè)車就砸了,別人誰(shuí)也別想用。那就表示組合關(guān)系了。一般來(lái)說(shuō),為了表示組合關(guān)系,常常會(huì)使用構(gòu)造方法來(lái)達(dá)到初始化的目的,例如上例中,加上一個(gè)以Car為參數(shù)的構(gòu)造方法

public Driver(Car car){ mycar = car; }

所以,關(guān)聯(lián)、聚合、組合只能配合語(yǔ)義,結(jié)合上下文才能夠判斷出來(lái),而只給出一段代碼讓我們判斷是關(guān)聯(lián),聚合,還是組合關(guān)系,則是無(wú)法判斷的。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 璧山县| 罗山县| 牙克石市| 锡林郭勒盟| 大港区| 建阳市| 吉林市| 竹溪县| 洪雅县| 美姑县| 陆丰市| 会昌县| 林周县| 鹤山市| 凉城县| 巴里| 黄大仙区| 娄烦县| 汝州市| 桃园市| 铁岭县| 隆昌县| 英吉沙县| 三门县| 安康市| 甘洛县| 汉源县| 辽源市| 玛多县| 北宁市| 西乌| 和田市| 大英县| 元氏县| 麻城市| 抚远县| 昭通市| 石林| 西丰县| 乌兰察布市| 德安县|