Composition vs Aggregation

Kitchen in House is Composition and Engine in Car is Aggregation

Composition:

If internal attributes can not exist without Outer Class, that goes to Composition. You can not take Bedroom, Kitchen or Balcony out of any Flat or House.

i.e

public class CompositionExample{
  public static void main(String[] args) {
    House house = new House();
  }
}

class House {
   public Kitchen kitchen;
   public House() {
       kitchen = new Kitchen();
   }
}

class Kitchen {
   // Kitchen's Attributes
}

Now imagine, Can we access Kitchen if we set

house = null;

No. It means, the attributes of House (i.e. Kitchen) Class can not exist without its House Class itself.

Aggregation:

But you can keep Engine out of any Car and put in any other Car. How?

public class AggregationExample {
   public static void main(String[] args) {
     Car car1 = new Car();
     Engine eng = new Engine();
     car1.setEngine(eng);
   }
}
class Car {
   private Engine engine;
   //Engine getter/setter;
}
class Engine {
   //Engine's attributes
}

If you notice here even if we set

car1 = null;

We still can access “engine” and put it in another Car

i.e.

Car car2 = new Car();
car2.setEngine(engine);

 

GIT Example : – https://github.com/tektutorial/java-design

 

Hope this clears your doubt on Composition and Aggregation.