Java中类与类之间的关系

时间:2023-02-17 15:07:52

类与类之间的关系

1、泛化 (Generalization)

    定义:即继承,指一个类(或接口)继承父类(或父接口)中的功能,并且可以添加自己特有的功能。

   代码中:用extends指明父类,java只有单继承!

   UML:继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。

                                    Java中类与类之间的关系


2、实现关系 (Realization)

 定义:实现指一个类实现了父接口中的方法(可以同时实现多个接口)。

   代码中:用implements指明实现的接口,多现实时接口名用“,”隔开!

   UML:组合关系以空心三角形加虚线箭头表示。 

                              Java中类与类之间的关系


3、依赖(Dependency)

定义:一个类A中用到了另一个类B,这中关系比较弱,具有临时性。但类A会受到类B的影响!

范例:如某人要写信,要使用笔,此时人与笔的关系就是依赖关系。而笔的型号颜色,则影响到人写信的内容形式。

    代码中:一个类的对象作为另一个类中成员函数的参数

    UML:依赖关系用由类A指向类B的带箭头虚线表示。

                             Java中类与类之间的关系


4、关联 (Association)

   定义:是一种结构关系,说明一个事物的对象与另一个事物的对象相联系。是一种较强的依赖关系,这种关系比较强,具有长期性。关联可以是单向的,或双向的,两个类之间是平等的。

    范例:你和你的盆友。

    代码中:一个类作为另一个类的字段(即成员变量)。

    UML:关联关系用由关联类A指向被关联类B的带箭头实线表示,在关联的两端可以标注关联双方的角色和多重性标记。

                              Java中类与类之间的关系



5、聚合 (Aggregation)

   定义:聚合是关联关系的一种特例,是整体与部分的关系,即has-a的关系。整体与部分是可分离的,部分也可能同时属于多个整体,各自有各自的生命周期!

    范例:如某同学是篮球俱乐部的成员,该同学还是电竞俱乐部的成员,其中某同学是部分,篮球俱乐部和电竞俱乐部是两个整体;

    代码中:与关联相同,只能通过语义区分。

    UML:聚合关系以空心菱形加实线箭头表示。

                              Java中类与类之间的关系



6、组合 (Composition)

   定义:组合也是关联关系的一种特例,与聚合类似,但关系比聚合更强,是contains-a的关系。整体与部分是不可分离的,部分只属于一个整体,部分与整体生命周期相同。

    范例:如人和人的手、脚和头的关系。

    代码中:与关联相同,只能通过语义区分。

    UML:组合关系以实心菱形加实线箭头表示。

                               Java中类与类之间的关系


关联、聚合和组合的区别:

    (1)关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
    (2)聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如俱乐部和它的成员就是聚集关系,因为俱乐部成员就是俱乐部的组成部分。

    (3)对于具有组合关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的对象的生命周期,当整体消失,部分也就随之消失。比如你的自行车被偷了,那么自行车的所有组件也不存在了,除非你事先把一些自行车的组件(比如车轮和车把)拆了下来。

总结    

    继承,实现,这两种关系容易区分,没有什么争议!他们体现的是类之间,或接口和类之间的纵向关系。

   组合、聚合、关联和依赖,这四中关系不容易区分,代码上也有相似之处,对于一些事务之间的关系不好准确的确定,这些关系要通过语义来确定。这几种关系的强弱程度依次为:组合>聚合>关联>依赖