类与类之间的关系(即事物关系),有继承(泛化)关系、实现关系、组合关系、聚合关系、关联关系和依赖关系6种。继承和聚合属于这六种关系中的其中两种。
-
在继承(Generalization,又叫作泛化)关系中,子类继承父类的所有功能,父类所具有的属性、方法,子类都应该有。除了与父类一致的信息,子类中还包括额外的信息。例如所有的类都默认继承了Object 类,因此所有的类都具有 hashCode 、equals 、clone 等方法,但是每个类又都有自己独特的属性和方法。
这种关系必须使用 extends 关键字来表示。
-
聚合(Aggregate)关系表示类之间整体与部分的关系,成员对象是整体对象的一部分,但是成员对象可以脱离整体对象独立存在。例如 TreeMap中的Comparator 和TreeMap就是一种聚合关系,同样的Comparator 可以用于不同的TreeMap,Comparator 的存在不依赖于TreeMap,即使脱离TreeMap,Comparator 本身是具有使用意义的一个类。
public class TreeMap<K,V> extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable { private final Comparator<? super K> comparator; …… }
聚合强调多个类协调完成一个整体的功能,而继承强调子父类的成员重用和类型兼容。在设计模式中,我们经常回强调类之间的六种关系,这六种关系是完成设计模式的源头。
从关系强度和紧密度来说 继承的关系强度大于聚合。