1)依賴
依賴關係是類與類之間的聯接。一個類依賴於另外一個類的定義。如,一我的(Person)能夠買車(Car)和房子(House),Person類依賴於Car和House的定義,由於Person引入了Car和House。與關聯不一樣的是,Person類中沒有Car和House的屬性,Car和House的實例是以參量的方式傳入到buy()方法中的。通常而言,依賴關係在Java語言中體現爲局部變量,方法形參,或者對靜態方法的調用。函數
2)關聯
關聯是類與類之間的聯接,使一個類知道另外一個類的屬性和方法。關聯能夠是雙向,也能夠是單向的。通常使用成員變量來實現。this
3)聚合
聚合是一種強的關聯關係。是總體和個體之間的關係。例如,汽車類與引擎類,輪胎類之間的關係就是總體與個體之間的關係。與關聯關係同樣,聚合關係也是經過實例變量實現的。可是關聯關係涉及的兩個類在同一層次,而聚合關係中兩個類處在不平等的層次上,一個表明總體,一個表明部分。spa
4)組合
組合也是關聯關係的一種,一種比聚合關係強的關係。組合關係中的部分類不能獨立於總體類存在。總體類和部分類有相同的生命週期。如Person類和Leg類。code
5)繼承/泛化
泛化和繼承實際上是一個逆過程 泛化就是有子類抽象出一個父類 而繼承就是由父類具體化一個子類 例如足球比聯賽跟什麼西甲 意甲 英超之間就是泛化/繼承的關係blog
6)組合和聚合的區別
組合和聚合都屬於關聯,因此它們之間不免有類似之處,區別舉例來講明:
程老師的《大話》裏舉大那個大雁的例子很貼切 在此我就借用一下 大雁喜歡熱鬧懼怕孤獨 因此它們一直過着羣居的生活 這樣就有了雁羣 每一隻大雁都有本身的雁羣 每一個雁羣都有好多大雁 大雁與雁羣的這種關係就能夠稱之爲聚合 另外每隻大雁都有兩隻翅膀 大雁與雁翅的關係就叫作組合 有此可見 聚合的關係明顯沒有組合緊密 大雁不會由於它們的羣主將雁羣解散而沒法生存 而雁翅就沒法脫離大雁而單獨生存——組合關係的類具備相同的生命週期
聚合關係圖:繼承
聚合關係圖:生命週期
雁羣類:class
public class GooseGroup { publi Goose goose; public GooseGroup(Goose goose){ this.goose=goose; } }
大雁類:變量
public class Goose{ public Wings wings; public Goose() { wings=new Wings(); } }
從構造函數來看,GooseGroup的構造函數要用到Goose做爲參數把值傳進來,Goose能夠脫離GooseGroup獨立存在。
組合關係中總體類含有部分類的實例化,Goose在實例化以前,必定要先實例化Wings,兩個類緊密耦合在一塊兒,它們有相同的生命週期,Wings不能獨立於Goose存在。構造函數
從信息封裝來看,聚合關係中,客戶端同時瞭解GooseGroup和Goose,由於它們是獨立的。而在組合關係中,客戶端只認識大雁類,根本不知道翅膀類的存在,由於翅膀類被嚴密封裝在大雁類中。