Java 类之间的关系

类之间的关系

概述

在类之间,最常见的关系有依赖(“uses-a”),聚合(“has-a”),继承(“is-a”)。
其中,依赖关系,是一种最明显、最常见的关系。如果一个类的方法操纵另一个类的对象,我们就说一个类依赖于另一个类。一般而言,依赖关系在 Java 语言中体现为局域变量、方法的形参,或者对静态方法的调用。在实际中,应该尽可能地将相互依赖的类减到最少,即让类之间的耦合度最小。
聚合关系,是一种具体且易于理解的关系。聚合关系意味着类A的对象包含类B的对象。它是关联关系的一种(关联关系将在下面介绍),是强关联关系。聚合是整体和个体之间的关系。例如,汽车类与引擎类、轮胎类,以及其他的零件类之间的关系就是整体与个体的关系。与关联关系一样,聚合关系也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的,而在聚合关系中,两个类处在不平等层次上的,一个代表整体,一个代表部分。
继承关系,是一种用于表示特殊与一般的关系。一般而言,如果类 A 扩展类 B ,类 A 不但包含从类 B 继承的方法,还会拥有一些额外的功能。
除了上述3种关系之外,类之间还存在关联关系和组合关系。
关联关系是类与类之间的连接,它意味着一个类知道另一个类的属性和方法。关联可以是双向的,也可以是单向的。在 Java 语言中,关联关系一般使用成员变量来实现。
组合关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期,组合关系是不能共享的。代表整体的对象需要负责保持代表部分的对象及其存活,在一些情况下将负责代表部分的对象湮灭掉。代表整体的对象可以将代表部分的对象传递给另一个对象,由后者负责此对象的生命周期。换言之,代表部分的对象在每一个时刻只能与一个对象发生组合关系(组合关系不能共享),由后者排他地负责生命周期。部分和整体的生命周期一致。

关系在 UML 中的表示方法

表 4-1 表达类关系的 UML 符号