java中对象关联通过成员变量引用实现,体现“has-a”关系;支持单向、双向及一对多/多对多形式,需配合getter/setter、集合接口声明与业务方法维护一致性。

Java 中实现对象之间的关联关系,主要靠引用变量——也就是在一个类中声明另一个类的实例作为成员变量。这不是语法关键字,而是一种设计实践,体现面向对象中“has-a”(拥有)关系。
用成员变量建立单向关联
最常见的方式:在类 A 中定义类型为类 B 的引用字段。
- 如果 B 是一个独立实体(如
Student拥有Address),就在Student类里加private Address address; - 关联可以是单个对象(
Address),也可以是多个(List<course> courses;</course>或Department department;) - 注意初始化时机:可在声明时、构造方法中或 setter 方法里赋值,避免空指针
双向关联需要双方互相持有引用
当两个类需要彼此访问时(如 Teacher 知道自己教哪些 Student,每个 Student 也知道自己的 Teacher),就得在双方都加引用。
-
Teacher类含private List<student> students;</student> -
Student类含private Teacher teacher; - 维护一致性很重要:添加学生时,既要
teacher.getStudents().add(student),也要student.setTeacher(teacher) - 避免循环引用导致的序列化或 GC 问题,必要时用
transient或弱引用
用集合表达一对多或多对多关系
现实中的关联往往不是一对一。Java 集合(List、Set、Map)是自然载体。
- 一对多:一个
Order对应多个OrderItem→private List<orderitem> items;</orderitem> - 多对多(需中间类或集合):如
Student和Course,可让Student持有Set<course></course>,Course持有Set<student></student> - 推荐使用接口(
List、Set)声明,具体实现(ArrayList、HashSet)在构造或初始化时确定
配合 getter/setter 和业务方法增强可维护性
光有字段不够,还需封装操作逻辑。
- 提供
getAddress()和setAddress(Address),而不是直接暴露字段 - 对集合,提供
addCourse(Course)、removeCourse(Course)等方法,在内部同步双向状态 - 考虑是否允许 null 关联:比如
Student可能暂时没分配Department,那就允许department == null;否则可用构造器强制传入
不复杂但容易忽略的是生命周期和责任归属——谁创建、谁销毁、谁负责维护关系一致性。这些不在语法层面强制,却直接影响代码健壮性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











