类之间的关系

1.继承(泛化关系)

继承是类和类之间存在父子关系,子类继承父类的属性和方法 

从子类指向父类,或者子接口指向父接口。

2.实现 

表示一个类实现一个或多个接口的方法。接口定义好操作的集合,由实现类去完成接口的具体操作

从类指向实现的接口。

3.依赖

依赖关系是类与类之间的联接。一个类依赖于另一个类的定义

一般是A中的某个方法把B的对象作为参数使用或者在A中的某个方法中作为局部变量使用

Java代码中的表现为局部变量,方法的参数,以及对静态方法的调用。

4.关联

关联是类与类之间的联接,使一个类知道另一个类的属性和方法。关联可以是双向,也可以是单向的。一般使用成员变量来实现。

关联关系关于分为有两种特殊的形式,聚合(Aggregation)和组合(Composition),聚合和组合只有概念上的区别,在Java中的代码实现上没有区别。

关联类B以类的属性形式出现在关联类A中,也可能是关联类A引用了一个类型为被关联类B的全局变量。

4.1.聚合

聚合是关联关系的一种特例,它体现的是整体与部分的关系,即has-a的关系。此时整体与部分之间是可分离的,它们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

4.2.组合

整体与部分是不可分的,所以生命周期一致。

 聚合和组合的区别在于:聚合关系是“has-a”关系,组合关系是“contains-a”关系;聚合关系表示整体与部分的关系比较弱,而组合比较强;聚合关系中代表部分事物的对象与代表聚合事物的对象的生存期无关,一旦删除了聚合对象不一定就删除了代表部分事物的对象。组合中一旦删除了组合对象,同时也就删除了代表部分事物的对象。

总结

  在Java中,应该尽量优先使用组合,而不是继承,因为继承会使得类关系过于复杂化,破坏了封装性,使用组合一样可以获得已有类的功能,而且会使新类更加稳固。

  实际上,从依赖 -----〉聚合--------〉组合,类与类之间的关系更加紧密,互相之间的影响越来越大,其实我们平常比较少去区分这些关系,而且事实上这东西的定义不太好理解,所以肯定会导致认识上的偏差,所以我们使用这些东西的时候,尽量靠近大家都认同的做法,这样容易让别人理解。

原文地址:https://www.cnblogs.com/fax1996/p/9448671.html