Java 后端面试题库 / 全部题解免费阅读理解原理,有条理地回答

关联、聚合、组合有什么区别?

先说出你的答案

定义边界、关键机制、一个反例;P8题再补容量、失败与验证。

查看完整题解

参考回答

直接回答

三者描述对象之间的业务关系。关联只表示对象有联系;聚合进一步表示整体与部分,但部分可以独立存在、被共享;组合强调部件在同一时刻只属于一个整体,并由整体管理其业务生命周期。它们是建模语义,Java 没有三个对应的专用关键字。

讲清原理

医生了解患者,是关联,不需要把患者看成医生的一部分。书单收录图书,可以按聚合理解:删掉书单,不等于删掉图书。订单拥有自己的明细,适合按组合理解:这条明细不能同时成为两个订单各自拥有的部件。

关键不是“字段写在类里没有”,而是对象能否共享、谁负责创建和移除、哪些状态必须一起成立。UML 对共享聚合的具体含义留给应用模型,不能只凭一条引用把关系判死。

关联表示联系,聚合表示共享整体关系,组合强调独占部件
关联表示联系,聚合表示共享整体关系,组合强调独占部件

例子与易错点

class Order { List<Line> lines; } 单凭这行声明,无法证明它是组合。如果调用者能把同一个可变明细塞进多个订单,就没有落实独占约束。

“删除整体时部件随之消失”说的是模型中的生命周期,不代表把 Java 变量设为 null 后,GC 立刻销毁所有部件。代码应通过封装、创建入口和不泄露可变引用来维护约束。

相关题:第 10 题、第 15 题、第 17 题。

这道题,你掌握得怎么样?

掌握程度由你主动标记,阅读和收藏不会自动改变状态。