類之間大致分爲5種關係:java
1,依賴關係(Dependency)this
單向,表示一個類依賴於另外一個類的定義,其中一個類的變化將影響另一個類,是一種「use a」關係3d
若是A依賴於B,則B表現爲A的局部變量,方法參數,靜態方法調用等code
public class Person { public void doSomething(){ Card card = new Card();//局部變量 .... } }
public class Person { public void doSomething(Card card){//方法參數 .... } }
public class Person { public void doSomething(){ int id = Card.getId();//靜態方法調用 ... } }
2,關聯關係(Association)對象
單向或雙向(一般咱們須要避免使用雙向關聯關係),是一種"has a"關係,若是A單向關聯B,則能夠說A has a B,一般表現爲全局變量blog
public class Person { public Phone phone; public void setPhone(Phone phone){ this.phone = phone; } public Phone getPhone(){ return phone; } }
3,聚合關係(Aggregation)繼承
單向,關聯關係的一種,與關聯關係之間的區別是語義上的,關聯的兩個對象一般是平等的,聚合則通常不平等,有一種總體和局部的感受,實現上區別不大接口
Class由Student組成,其生命週期不一樣,總體不存在了,部分依然存在,當前Team解散了,人還在,還能夠加入別的組生命週期
public class Team { public Person person; public Team(Person person){ this.person = person; } }
4,組合關係(Composition)ci
單向,是一種強依賴的特殊聚合關係
Head,Body,Arm和Leg組合成People,其生命週期相同,若是總體不存在了,部分也將消亡
public class Person { public Head head; public Body body; public Arm arm; public Leg leg; public Person(){ head = new Head(); body = new Body(); arm = new Arm(); leg = new Leg(); } }
5,繼承關係(Inheritance)
類實現接口,類繼承抽象類,類繼承父類都屬於這種關係
能夠分得更細:
實現(Realization):類實現接口屬於這種關係
泛化(Generalization):即"is a"關係,類繼承抽象類,類繼承父類都屬於這種關係