❓ Чем композиция отличается от наследования?
Наследование — это отношение «is-a», поведение родителя достаётся подклассу статически на этапе компиляции. Композиция — отношение «has-a», объект делегирует работу вложенным объектам.
Проблемы наследования: сильная связанность с деталями реализации родителя (fragile base class), нарушение инкапсуляции, негибкость (только один родитель), лёгкость нарушить принцип Лисков.
Композиция более гибкая: поведение можно менять в рантайме (паттерн «Стратегия»), зависимости легко подменять в тестах, нет хрупкой иерархии. Отсюда принцип «предпочитай композицию наследованию». Наследование оправдано при настоящем «is-a» и стабильной иерархии.
🐸 Библиотека собеса по Java
#core
Post #1398
972
- 👍 5
- 🔥 1
- 👏 1