海纳百川,有容乃大。世间万物皆有联系,“随风潜入夜,润物细无声”,描述的是春风、细雨与万物之间的联系。
在Java的世界里,类与类之间又有着怎样的关系呢?
在Java中,类与类之间主要有6种关系,分别是:依赖、关联、聚合、组合、继承、实现,并且耦合度依次增强。
依赖关系在Java中的表现就是:类A的对象使用类B的对象,其中类B的对象作为类A的方法参数、局部变量,或者直接在类A中调用类B的静态方法。
**【箭头及指向】:**在UML类图中,以虚线箭头
表示,箭头指向被依赖的类。
代码示例:
public class Computer {
// Mouse作为Computer中move方法的形参,建立起依赖关系
public void move(Mouse mouse) {
mouse.move();
}
}
public class Mouse {
public void move() {
}
}
关联关系分为单向关联与双向关联,在Java中的表现是:一个类中包含有另一个类。
- 单向关联:类A中包含有类B。
- 双向关联:类A中包含有类B,类B中包含有类A。
**【箭头及指向】:**在UML类图中,以实线箭头
表示,箭头指向被关联的类。
单向关联示例代码:
public class Computer {
private SdCard sdCard;
}
public class SdCard {
}
从定义上来看,聚合关系是关联关系的一种,也是一个类中包含有另一个类,但是聚合关系强调的是**“整体-个体”**之间的相互关系,例如计算机与硬盘之间的关系,计算机作为一个整体,包含有硬盘,但是硬盘可以脱离计算机这个整体而单独存在。
**【箭头及指向】:**在UML类图中,以带空心菱形的实线
表示,菱形指向整体。
代码示例:
public class Computer {
private Disk disk;
// 聚合关系,通常使用setter方法来维护其成员变量值
public void setDisk(Disk disk) {
this.disk = disk;
}
}
public class Disk {
}
从定义上来看,组合关系是关联关系的一种,也是一个类中包含有另一个类,但是组合关系强调的是“整体-部分”之间的共存亡关系,整体与部分具有相同的生命周期,部分不能与脱离整体而单独存在,有种唇亡齿寒的感觉哈。
**【箭头及指向】:**在UML类图中,以带实心菱形的实线
表示,菱形指向整体。
代码示例:
public class Computer {
private Cpu cpu;
// 组合关系,通常使用构造方法来维护其成员变量值
public Computer(Cpu cpu) {
this.cpu = cpu;
}
}
public class Cpu {
}
继承关系在Java表示的类与类(接口与接口)之间的父子关系,表示子类在具有父类特性的同时,还具有自己独特的特性。在Java中,用extends关键字表示继承关系。
**【箭头及指向】:**在UML类图中,以带三角箭头的实线
表示,箭头指向父类。
示例代码:
public class Computer {
}
// 继承关系
public class PersonalComputer extends Computer{
}
实现关系在Java中表现的是类与接口之间的关系,接口中定义了抽象的特性,类则是该接口特性的具体实现。
**【箭头及指向】:**在UML类图中,以带三角箭头的虚线
表示,箭头指向接口。
示例代码:
// 实现关系
public class Computer implements Calculate{
}
public interface Calculate {
}
这几种类与类之间的关系,耦合度也是依次增强的:依赖 < 关联 < 聚合 < 组合 < 继承 < 实现。