Предположим, у нас есть такой класс:
class Engine {
void start() {
}
}и Car наследуется от Engine:
class Car extends Engine {
void drive() {
start();
}
}Наследование выражает отношение is, но автомобиль на самом деле не является двигателем, он имеет двигатель. Перепишем через делегацию:
class Car {
private Engine engine;
Car(Engine engine) {
this.engine = engine;
}
void drive() {
engine.start();
}
}Таким образом эти два класса развязаны, и отношение превращается в has.
👉 Java Portal