Sobes.tech
Назад к вопросам
Senior
3

В чём разница между композицией и наследованием? Что предпочтительнее?

Компании, где спрашивали
cdti

Ответ от нейросети

sobes.tech AI

Наследование — это механизм, при котором один класс (подкласс) расширяет другой (суперкласс), наследуя его свойства и методы. Это позволяет создавать иерархии классов и повторно использовать код.

Композиция — это когда один объект содержит другой объект и делегирует ему часть своей функциональности. Вместо наследования используется включение объектов как полей.

Разница:

  • Наследование устанавливает "является" (is-a) отношение, композиция — "имеет" (has-a).
  • Наследование жестко связывает подкласс с суперклассом, композиция более гибкая и позволяет менять компоненты во время выполнения.

Что предпочтительнее? В современном дизайне ПО предпочтение часто отдается композиции, так как она способствует слабой связности и лучшей модульности. Наследование стоит использовать, когда действительно есть смысл в иерархии и полиморфизме.

Пример композиции в Java:

class Engine {
    void start() { System.out.println("Engine started"); }
}

class Car {
    private Engine engine = new Engine();
    void start() { engine.start(); }
}

Здесь Car "имеет" Engine, а не наследует его.