Назад к вопросам
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, а не наследует его.