java基礎--繼承、實現、依賴、關聯、聚合、組合的聯系與區別


繼承

指的是一個類或者接口繼承另一個類或者接口,而且可以增加自己的新功能。

實現

 指的是一個class類實現interface接口。

 

依賴

簡單說,就是一個類中的方法用到了另一個類,一般依賴關系在java中提現為局部變量、方法的形參,或者對靜態方法的調用。是一種弱關系。例如人用筆寫字,人與筆之間的關系就是依賴。

 

關聯

關聯是一種強關系,類與類或者類與接口之間的一種強依賴關系。一般以類的屬性形式出現在關聯類中,在java中關聯關系一般使用成員變量來實現。

 

聚合

聚合是關聯的一種特例,體現的是整體與部分的關系,即has-a的關系。

has-a 不是must has,例如飛機場和飛機,飛機場可以停有飛機,也可以沒有停飛機,飛機可以停在飛機場,也可以飛在天上。

他們有各自的生命周期。

 

組合

組合也是關聯的一種特例,他體現的是contains-a的關系,比聚合更強。

組合同樣體現整體和部分的關系,但是整體和部分是不可分割的,他們有共同的生命周期。

例如,人有耳朵鼻子等,一旦人死了,耳朵鼻子也就死了。


對於繼承和實現應該沒有什么疑問,他們體現的是類與類、類與接口直接的一種縱向關系。其他四中體現的是類與類、類與接口之間的引用、橫向關系,很難區分。代碼上沒什么太大區別,主要是語義上的區別。

幾種關系強弱程度依次為:組合>聚合>關聯>依賴。

聚合和組合

  1. 聚合和組合都是一種關聯關系,只是具有不同的整體-部分的意義。
  2. 整體部分中,部分的生命周期不同。聚合關系中,整體不會擁有部分的生命周期,整體刪除時,部分不會被刪除,多個整體共享同一個部件。組合關系中,整體擁有部分的生命周期,整體刪除時,部分一定會被刪除。

而且,多個整體不可以同時共享同一個部分。(區分某個關聯關系是組合還是聚合,看兩個類的生命周期是否同步,同步就是組合關系,不同步就是聚合關系)

         3.聚合是has-a 關系,組合是contains-a 關系。

舉個簡單的例子:

大家需要去公司上班,所以很多員工組成了公司,每個公司都有自己的員工,每個員工也有自己的公司。員工和公司就是聚合的關系。另外,每個員工都有手腳,人和手腳的關系就是組合,不可分割,擁有相同的生命周期。

聚合關系圖:

  

組合關系圖:

代碼上看區別:

public class Company {
    public List<Company> companyList;

    public Company(List<Company> companyList) {
        this.companyList = companyList;
    }
}
public class Employee {
    public Hand hand;

    public Employee() {
        this.hand = new Hand();
    }
}

信息的封裝性不同 
在聚合關系中,調用者可以同時了解公司和員工類,因為他們都是獨立的 
而在組合關系中,調用者只認識員工,根本就不知道手的存在,因為手類被嚴密的封裝在員工類中。

http://blog.csdn.net/qq_31655965/article/details/54645220


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM