类之间的关系

Java 中类直接的关系,可分为:

  • 泛化(反向:继承/实现)
  • 依赖 Dependency
  • 关联 Association
  • 聚合 Aggregation

更一般的表述,可以参考《UML 类图》一文。

本文所用到的 UML 图,在这里:

泛化关系

找不同类的共同点,抽象成一个共同的接口或抽象类,这个接口或抽象类与被抽象的类之间的关系就是泛化。泛化和继承/实现的方向是相反的。如图所示:

生肖

其中,生肖是狗和虎的泛化,生肖对狗或虎是 has-a 的关系;狗和虎是对生肖的实现,是 is-a 的关系。

A类继承了B类, 此时A类不仅有了B类的方法, 还有其自己的方法.(个性存在于共性中)。

在类扩展时,有一些需要注意的问题,如方法的可见性,抛出异常的范围等,参本站的《Java 继承中需要注意的几个问题》。

依赖关系

一个类依赖另一个类的关系。依赖关系通过方法参数来体现。如下图:

人吃面包

人吃面包 Person eats bread

人吃(依赖于)面包,俗称 use-a 关系

关联关系

两个类的对象之间的对应关系:1:1, 1:n, m:n。如班级和学生之间的关联关系。它可以通过成员变量体现。

更详细的解释可以本站的《类图(Class Diagram)

聚合关系

一个类持有另一个类的引用,它和关联关系在语法上是一样的,只能从语意上区分,它比关联关系要强很多,它也是 has-a 关系,但是整体和局部的关系。

更详细的解释可以本站的《类图(Class Diagram)