回憶下UML圖
繼承

接口實現

接下來是類與類的關系(從弱到強)
倚賴(dependency):
類與類之間的連接,表示一個類依賴於另外一個類的定義,依賴關系時是單向的。
簡單理解就是類A使用到了類B,這種依賴具有偶然性、臨時性,是非常弱的關系。
在java中表現為:
1.局部變量
2.方法中的參數
3.對靜態方法的調用

關聯(association)
關系表示類與類之間的連接,它使得一個類知道另外一個類的屬性和方法。
關聯關系體現的是兩個類,或者類與接口之間的強依賴關系,這種關系很強烈,比依賴更強,不是偶然性的,也不是臨時性的,而是一種長期性,相對平等的關系。
Java中表現
1.使用實例變量

聚合(aggregation)
是關聯關系的特例,是強的關聯關系,聚合是整個與個體的關系,即has-a關系(is-a是繼承),此時整體和部分是可以分離的,他們具有各自的生命周期,部分可以屬於多個對象,也可以被多個對象共享;
比如計算機和CPU,公司與員工的關系;
與關聯代碼層面一致。

組合(compostion)
是關聯關系的一種特例,體現的是一種contain-a關系。它同樣體現整體與部分的關系,但此時整體與部分是不可分的,整體生命周期的結束也意味着部分生命周期的結束,反之亦然。
與關聯代碼層面一致。
組合/聚合區別:
組合“部分”不能脫離“整體”單獨存在,其生命周期應該是一致的。
聚合“部分”可以脫離“整體”單獨存在,他們具有各自的生命周期。

