Association vs Aggregation vs Composition
Association vs aggregation vs composition explained with Java examples — lifecycle ownership, has-a relationships, and interview Q&A.
Expected Interview Answer
Association is any structural relationship where one object refers to another, aggregation is a weak has-a where the contained object can exist independently, and composition is a strong has-a where the contained object is owned and dies with its container.
All three describe how objects reference one another, but they differ in strength and lifecycle coupling. Plain association just means one class holds a reference to another with no implied ownership — a Teacher referencing a Student, for instance. Aggregation narrows this to a whole/part relationship where the part is meaningfully independent, such as a Department holding a list of Employee objects that continue to exist if the department is removed. Composition tightens further: the part has no independent existence and is typically created inside the whole’s constructor and destroyed with it, such as a House and its Room objects. In code, all three often look like plain object references or fields; the distinction is conceptual and lifecycle-driven, not syntactic.
- Clarifies who is responsible for creating and destroying an object
- Prevents dangling references by making ownership explicit
- Guides correct cascade-delete and serialization decisions
- Improves domain modeling accuracy during design reviews
AI Mentor Explanation
A Commentator referencing a Match is plain association — they simply talk about a match without owning it, and both exist independently. A Team holding a list of Player objects who can be traded to another team next season is aggregation — the players survive even if this particular team’s roster changes. A specific Innings containing its BallByBallLog is composition — that log is created for and destroyed with that exact innings, never reused elsewhere.
Step-by-Step Explanation
Step 1
Check for any reference at all
If one class simply holds or uses another, it is at minimum an association.
Step 2
Ask whether it is whole/part
If the reference represents a container-and-contents relationship, it narrows to aggregation or composition.
Step 3
Ask about lifecycle ownership
If the part can exist and be reused independently of the whole, it is aggregation.
Step 4
Confirm strict ownership for composition
If the part is created by and destroyed with the whole, and never shared, it is composition.
What Interviewer Expects
- A clear ordering of strength: association < aggregation < composition
- Concrete has-a examples for both aggregation and composition
- Recognition that syntax alone (a field reference) does not distinguish them
- Awareness of lifecycle and shareability as the deciding factors
Common Mistakes
- Claiming Java syntax alone tells you which relationship is used
- Treating aggregation and composition as interchangeable synonyms
- Forgetting that association is the umbrella term covering all has-a/uses-a links
- Failing to mention that composed parts are typically not shared between instances
Best Answer (HR Friendly)
“Association is the loosest relationship — two objects just know about each other. Aggregation is a step stronger, a whole holding parts that can still exist and be reused on their own. Composition is the strongest — the part is created and destroyed along with the whole and has no independent existence, like a house and its rooms.”
Code Example
// Association: Teacher just references a Student, no ownership
class Teacher {
void advise(Student s) { System.out.println("Advising " + s.getName()); }
}
// Aggregation: Department holds Employees that can outlive it
class Department {
private List<Employee> employees; // passed in, not created here
Department(List<Employee> employees) { this.employees = employees; }
}
// Composition: House owns Rooms; rooms cannot exist without the house
class Room {
Room(String name) { /* created only by House */ }
}
class House {
private final List<Room> rooms = new ArrayList<>();
House() {
rooms.add(new Room("Kitchen")); // created internally, dies with House
}
}Follow-up Questions
- Can you have aggregation without any code-level difference from a plain reference?
- How would you model composition when using a dependency-injection framework?
- What happens to composed parts when the containing object is garbage collected?
- Is a many-to-many relationship ever valid as composition?
MCQ Practice
1. Which relationship allows the “part” object to exist independently of the “whole”?
Aggregation is a weak has-a where the part can exist and be reused outside the whole.
2. A House class that creates its own Room objects internally and destroys them with itself demonstrates?
Composition ties the lifecycle of the part strictly to the whole that creates it.
3. Which of the three relationships is the broadest umbrella term?
Association is the general term for any structural reference; aggregation and composition are specialized forms of it.
Flash Cards
Association? — A general reference between two classes with no implied ownership.
Aggregation? — A whole/part relationship where the part can exist independently.
Composition? — A whole/part relationship where the part is owned and dies with the whole.
What decides the category? — Lifecycle ownership and shareability, not the syntax of the reference.