В Kotlin наследование по умолчанию закрытое (final), классы и методы необходимо явно помечать как open для возможности наследования и переопределения. Поддерживается наследование только от одного класса, но можно реализовывать множество интерфейсов.
При наследовании конструктор базового класса вызывается после конструктора производного:
kotlin
Делегирование в Kotlin реализовано на уровне языка с использованием ключевого слова by. Оно позволяет передать реализацию интерфейса другому объекту. Это удобная альтернатива наследованию реализации (которое не поддерживается напрямую).
kotlin
Здесь DelegateGreeter делегирует вызов метода greet объекту greeter.
Сравнение:
| Feature | Наследование | Делегирование (by) |
|---|---|---|
| Отношение | "is a" (Является) | "has a" (Содержит) |
| Реализация | Прямое расширение класса | Передача реализации объекту |
| Множественность | Один базовый класс | Множество интерфейсов |
| Гибкость | Менее гибко | Более гибко, композиция |
| Видимость | Наследует protected и public | Работает через интерфейсы |
Делегирование часто предпочтительнее наследования для достижения гибкости и избегания проблем "хрупкого базового класса".