聚合是“整体-部分”的弱拥有关系,部分可独立存在、被共享且生命周期不受整体控制;代码中通过外部创建、引用注入体现,不使用new实例化部分对象。

聚合关系在Java OOP中表示一种“整体-部分”的弱拥有关系,部分对象可以独立存在、可被共享、生命周期不受整体控制。
聚合的核心特征
聚合不是简单的引用,而是有明确语义的结构化关系:
-
部分可独立存在:比如一个
Department对象持有Employee引用,但员工离开部门后仍可存在,甚至加入其他部门 -
整体不负责创建或销毁部分:
Employee实例通常由外部创建,再通过构造函数或setter方法传入整体类 -
支持共享:同一个
Employee对象可以同时被多个Department引用 -
生命周期解耦:删除
Department不会触发Employee的清理逻辑
代码上怎么体现聚合
关键看“谁创建、谁管理”:
- 部分对象在类外部初始化(如
new Employee("张三")) - 整体类仅持有一个引用,常通过参数注入:
private List或employees; private Employee manager; - 不包含对部分对象的
new调用(那是组合的标志)
示例:
立即学习“Java免费学习笔记(深入)”;
class Department {
private List members;
public Department(List members) {
this.members = members; // 外部传入,不自己new
}
}
聚合和组合最直白的区别
就看一句话能不能成立:
- 聚合:“这个部分,离开整体还能活。”——比如轮胎卸下来能装到别的车上
- 组合:“这个部分,没了整体就没了意义,甚至不能单独存在。”——比如心脏离了人体就不是“心脏”了(在业务语义层面)
技术上对应:聚合用引用传递,组合用内部new;语义上对应:聚合是“我用你”,组合是“我就是你的一部分”。
别混淆:聚合 ≠ 关联,但聚合是一种关联
关联是更宽泛的概念,只要两个类有引用就算;聚合是带语义的关联——必须体现“整体-部分”结构,且部分有独立性。比如Teacher引用Student,若只是临时教学关系,属于普通关联;若把Student当作班级的组成部分并长期管理,则才可能升级为聚合。
基本上就这些。理解聚合的关键,是抓住“松耦合、可复用、生命周期自主”这三点。










