一、纵向关系
1.泛化
【释义】:
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。
一般化的关系是从子类指向父类的,与继承或实现的方法相反
【具体表现】:
父类 父类实例 = new 子类()
【代码体现】:
class Animal{}
class Tiger extends Animal{}
public class Test{
public void test(){
Animal anAnimal = new Tiger();
}
}
二、横向关系
强弱关系:依赖<关联<聚合<组合
1.依赖
【释义】:
… uses a…
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系
【具体表现】:
依赖关系表现在局部变量,方法的参数以及对静态方法的调用
【现实例子】:
比如拧螺丝,要借助(也就是依赖)螺丝刀来帮助完成
【代码体现】:
public class Person{
//打电话
public void call(Phone phone){
phone.call();
}
}
2.关联
【释义】:
…has a…
对于两个相对独立的对象,当一个对象的实例与另一个对象的实例存在固定的对应关系时,这两个对象之间为关联关系
关联的2个对象彼此间没有任何强制性的约束,只要二者同意,可以随时解除关系或是进行关联,他们在生命周期上没有任何约定
谁都可以离得开谁
【具体表现】:
关联关系是使用成员变量来实现
【现实例子】:
比如客户和订单,每个订单对应特定的用户,每个用户对应一些特定的订单;
再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
【代码体现】:
public class Employee{
public void startWorking(){
//开始工作
}
}
public class Company{
private Employee employee;
public Employee getEmployee(){
return employee;
}
public void setEmployee(Employee employee){
this.employee = employee;
}
public void run(){
//公司运作
employee.startWorking();
}
}
3.聚合
【释义】:
…owns a…
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚合关系。
聚合关系是关联关系的一种,是较强的关联关系,强调的是整体与部分之间的关系
比如图书馆和书,没有书的图书馆依旧是图书馆
【具体表现】:
聚合关系也是通过成员变量来实现的
【现实例子】:
我和我的手机
【代码体现】:
public class Person{
private Phone myPhone;
public void call(){
myPhone.call();
}
}
4.组合
【释义】:
…is a part of…
它直接要求包含对象对被包含对象的拥有以及包含对象与被包含对象生命周期的关系。
整体不存在,部分一定不存在;而部分不存在,整体可能存在
部分必须创建于整体之后,销毁于整体之前
【具体体现】:
聚合关系也是通过成员变量来实现的
【现实例子】:
人和心脏,心脏是人体组成部分,缺了心脏人不能活
人和阑尾,阑尾也是人体组成部分,摘除后也能活
【代码体现】:
public class Human{
private Heart myHeart;
public CPU getHeart(){
return myHeart;
}
public vois setHeart(Heart myHeart){
this.myHeart = myHeart;
}
public Human(){
myHeart = new Heart();
}
}