通常我們都會使用UML圖來表示類與類之間的關系。在這里介紹基本的UML畫法,并用UML圖類表示類之間的關系。
UML類圖的表示方式:
一、類的屬性的表示方式
在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個Employee類,它包含name,age和email這3個屬性,以及modifyInfo()方法。

那么屬性/方法名稱前加的加號和減號是什么意思呢?它們表示了這個屬性或方法的可見性,UML類圖中表示可見性的符號有三種:
+ :表示
public
- :表示private
#:表示protected(friendly也歸入這類)
因此,上圖中的Employee類具有3個私有屬性和一個公有方法。
實際上,屬性的完整表示方式是這樣的:
可見性 名稱 :類型 [ = 缺省值]
中括號中的內(nèi)容表示是可選的
二、類的方法的表示方式
上圖中我們已經(jīng)看到了方法的表示形式。實際上,方法的完整表示方式如下:
可見性 名稱(參數(shù)列表) [ : 返回類型]
同樣,中括號中的內(nèi)容是可選的。
比如在下圖的Demo類中,定義了3個方法:

-
public方法method1接收一個類型為Object的參數(shù),返回值類型為void -
protected方法method2無參數(shù),返回值類型為String -
private方法method3接收類型分別為int、int[]的參數(shù),返回值類型為int
類之間大體分為5種關系:
在設計模式中類與類之間的關系主要有5種:依賴、關聯(lián)、聚合、組合、繼承,它們之間的耦合度依次增加。
1,依賴關系(Dependency)
單向,表示一個類依賴于另一個類的定義,其中一個類的變化將影響另外一個類,是一種“use a”關系!如果A依賴于B,則B表現(xiàn)為A的局部變量,方法參數(shù),靜態(tài)方法調(diào)用等

public class Driver {
public void driver(){
Car car = new Car ();//局部變量
....
}
public void driver1(Car car){} //方法參數(shù)
public void driver2(){
Car.move(); //靜態(tài)方法調(diào)用
...
}
}
正常情況下,如果先設計類圖, 再進行編碼,那么在類圖的設計過程中是不會涉及到具體的實現(xiàn)細節(jié)的,所以畫類圖的依賴關系時,只要關注接口層面就可以了(依賴僅畫接口參數(shù),忽略局部變量,靜態(tài)方法調(diào)用)
2,關聯(lián)關系(Association)
單向或雙向(通常我們需要避免使用雙向關聯(lián)關系),是一種"has a"關系,如果A單向關聯(lián)B,則可以說A has a B,通常表現(xiàn)為全局變量

public class Customer {
public Address address;
public void setAddress (Address address){
this.address= address;
}
public Address getAddress (){
return address;
}
}
雙向關聯(lián):

自關聯(lián):

3,聚合關系(Aggregation)
單向,關聯(lián)關系的一種,與關聯(lián)關系之間的區(qū)別是語義上的,關聯(lián)的兩個對象通常是平等的,聚合則一般不平等,有一種整體和局部的感覺,實現(xiàn)上區(qū)別不大!

public class Team {
public Person person;
public Team(Person person){
this.person = person;
}
}
Team 由 Person 組成,其生命周期不同,整體不存在了,部分依然存在,當前Team解散了,人還在,還可以加入別的組。
4,組合關系(Composition)
單向,是一種強依賴的特殊聚合關系

public class Person {
public Head head;
public Body body;
public Person(){
head = new Head();
body = new Body();
}
}
Head,Body,Arm和Leg等組合成People,其生命周期相同,如果整體不存在了,部分也將消亡。
5,繼承關系(Inheritance)
類繼承抽象類,類繼承父類,對應的是extend關鍵字

類實現(xiàn)接口,對應implement關鍵字

可以分得更細:
實現(xiàn)(Realization):類實現(xiàn)接口屬于這種關系
泛化(Generalization):即"is a"關系,類繼承抽象類,類繼承父類都屬于這種關系