組合關(guān)系java代碼 java中組合關(guān)系

怎么看java代碼中接口調(diào)用關(guān)系

類與類的關(guān)系

創(chuàng)新互聯(lián)服務(wù)項目包括扶風(fēng)網(wǎng)站建設(shè)、扶風(fēng)網(wǎng)站制作、扶風(fēng)網(wǎng)頁制作以及扶風(fēng)網(wǎng)絡(luò)營銷策劃等。多年來,我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢、行業(yè)經(jīng)驗、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,扶風(fēng)網(wǎng)站推廣取得了明顯的社會效益與經(jīng)濟效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到扶風(fēng)省份的部分城市,未來相信會繼續(xù)擴大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

1、依賴關(guān)系

依賴關(guān)系表示一個類依賴于另一個類的定義。通俗來講即是類A中使用了另外的一個類B,且類B并非類A中作為屬性存在,即表示類A依賴于類B。對象之間最弱的一種關(guān)聯(lián)方式,是臨時性的關(guān)聯(lián)。代碼中一般指由局部變量、函數(shù)參數(shù)、返回值建立的對于其他對象的調(diào)用關(guān)系。

class A{

public B method(C c){

B b = new B();

return b;

}

}

登錄后復(fù)制

2、關(guān)聯(lián)關(guān)系

關(guān)聯(lián)關(guān)系是類與類之間的聯(lián)接,它使一個類知道另一個類的屬性和方法。通俗來講即類A中有一個屬性b,該屬性的數(shù)據(jù)類型為類B,類A可以通過屬性b調(diào)用類B的屬性與方法。也即一般來說的has-a的關(guān)系。

class A{

public B b;

}

登錄后復(fù)制

3、聚合關(guān)系

聚合關(guān)系是特殊的關(guān)聯(lián)關(guān)系,其與關(guān)聯(lián)關(guān)系在代碼上并無實際上的區(qū)別,二者的區(qū)別主要體現(xiàn)在語義上,關(guān)聯(lián)關(guān)系即代表可有可無,而聚合關(guān)系則代表必須擁有(注:被聚合或關(guān)聯(lián)的事務(wù)也代表一個單獨的事務(wù),其也有獨立的意義。)舉例說明就像筆記本電腦,其與外接鼠標就是關(guān)聯(lián)關(guān)系,外接鼠標只是附件,而想cpu,內(nèi)存條等是組成一個筆記本電腦所必須的,而他們的關(guān)系就是聚合關(guān)系。

class computer{

public Cpu cpu1;

}

登錄后復(fù)制

4、組合關(guān)系

組合關(guān)系也是特殊的關(guān)聯(lián)關(guān)系,其類似于聚合關(guān)系,但比聚合關(guān)系更加的強,即對象 A 包含對象 B,對象 B 離開對象 A 沒有實際意義。舉例來講就是作為一個人,你可以沒有錢,但你不能沒有腦子(物理),你與錢就是關(guān)聯(lián)關(guān)系,錢乃身外之物,而你與大腦則是組合關(guān)系,大腦每人就一個,沒了它,你便無法存在,而單獨一個腦子離開了人也就失去了它應(yīng)有的作用。

class person{

public Head head;

}

登錄后復(fù)制

5、繼承關(guān)系

類與類的繼承關(guān)系,類與接口的實現(xiàn)關(guān)系。繼承指的是一個類(稱為子類、子接口)繼承另外的一個類(稱為父類、父接口)的功能,并可以增加它自己的新功能的能力。

class A extends B{

public A(){

super();

}

}

登錄后復(fù)制

類與類之間的繼承只能是單繼承,但可以多層繼承。

單繼承即表示一個類只可以繼承一個父類。

多層繼承即是類A繼承類B,而類B又繼承了類C,所以類A間接繼承了類C

類與接口之間的關(guān)系

注:Java8新增了默認方法和靜態(tài)方法;

public interface A{

//抽象方法

public void a1();

//默認方法

default void a2() {

System.out.println("a2");

}

//靜態(tài)方法

static void a4() {

System.out.println("a4");

}

}

登錄后復(fù)制

?

其中,靜態(tài)方法只供接口直接使用

類可以繼承一個類且實現(xiàn)多個接口

注意:

1.如果多個接口中有同名的抽象方法,那么實現(xiàn)類只需要實現(xiàn)一次即可

2.如果多個接口中有同名的默認方法,那么實現(xiàn)類必須重寫一次,并且要去掉default關(guān)鍵字

接口可以繼承多個接口

注意:

1.如果多個父接口中有同名的抽象方法,那么子接口只需要實現(xiàn)一次即可

2.如果多個父接口中有同名的默認方法,那么子接口必須重寫默認方法,必須要加default關(guān)鍵字

java怎么理解組合/聚合關(guān)系給個例子最好能將細點

聚合(Aggregation)?關(guān)系是關(guān)聯(lián)關(guān)系的一種,是強的關(guān)聯(lián)關(guān)系。聚合是整體和個體之間的關(guān)系。例如,汽車類與引擎類、輪胎類,以及其它的零件類之間的關(guān)系便整體和個體的關(guān)系。與關(guān)聯(lián)關(guān)系一樣,聚合關(guān)系也是通過實例變量實現(xiàn)的。但是關(guān)聯(lián)關(guān)系所涉及的兩個類是處在同一層次上的,而在聚合關(guān)系中,兩個類是處在不平等層次上的,一個代表整體,另一個代表部分。?

組合(Composition)?關(guān)系是關(guān)聯(lián)關(guān)系的一種,是比聚合關(guān)系強的關(guān)系。它要求普通的聚合關(guān)系中代表整體的對象負責代表部分對象的生命周期,組合關(guān)系是不能共享的。代表整體的對象需要負責保持部分對象和存活,在一些情況下將負責代表部分的對象湮滅掉。代表整體的對象可以將代表部分的對象傳遞給另一個對象,由后者負責此對象的生命周期。換言之,代表部分的對象在每一個時刻只能與一個對象發(fā)生組合關(guān)系,由后者排他地負責生命周期。部分和整體的生命周期一樣。

class?Driver?{???

//使用成員變量形式實現(xiàn)關(guān)聯(lián)???

Car?mycar;???

public?void?drive(){???

mycar.run();???

}???

...???

//使用方法參數(shù)形式實現(xiàn)關(guān)聯(lián)???

public?void?drive(Car?car){???

car.run();???

}???

}

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

class?Driver?{???

//使用成員變量形式實現(xiàn)聚合關(guān)系???

Car?mycar;???

public?void?drive(){???

mycar.run();???

}???

}

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

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

public?Driver(Car?car){???

mycar?=?car;???

}

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

Java如何實現(xiàn)動態(tài)的組合, Thinking in Java 這本書中 說過 動態(tài)的組合就是聚合, 誰能給我舉個簡單例子?

在面向?qū)ο笾?,類與類之間的關(guān)系有泛化,依賴,關(guān)聯(lián),聚合,組合幾種。

其中,聚合和組合都屬于關(guān)聯(lián)。

在具體編程中:

依賴表現(xiàn)為如果A類依賴于B,則B體現(xiàn)為A的局部變量,方法參數(shù)或靜態(tài)方法的調(diào)用。

eg:

class B{

Static void function1(){};

void function2(){};

}

public class A{

public static void main(String[] args){

....

B.function1();//A類中調(diào)用了B類的靜態(tài)方法

....

}

}

聚合和組合都屬于關(guān)聯(lián),很難區(qū)分,但是只要記住一點,區(qū)分它們就容易多了:

處于聚合關(guān)系的兩個類生命周期不同步,則是聚合關(guān)系;處于組合關(guān)系的兩個類的生命周期同步;

eg:

聚合關(guān)系,當A創(chuàng)建的時候,B不一定創(chuàng)建;當A消亡時,B不一定消亡。

class A{

private B;

}

class B{

....

}

組合關(guān)系,當創(chuàng)建一個A對象時,也會創(chuàng)建一個B對象;當A對象消亡時,作為A的屬性的B對象也會消亡。

class A{

private b=new B();

....

}

class B{

....

}

網(wǎng)頁名稱:組合關(guān)系java代碼 java中組合關(guān)系
當前路徑:http://muchs.cn/article20/dohcejo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站排名用戶體驗、定制網(wǎng)站自適應(yīng)網(wǎng)站、企業(yè)建站網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)