В Kotlin наследование реализовано через механизм классов и интерфейсов. Классы могут наследовать только один другой класс (одиночное наследование), но могут реализовывать множество интерфейсов.
По умолчанию все классы в Kotlin 'final', то есть не могут быть унаследованы. Чтобы разрешить наследование, класс должен быть явно помечен ключевым словом open.
Наследование классов:
kotlin
В конструкторе дочернего класса необходимо вызвать конструктор базового класса, явно или неявно.
Интерфейсы:
Интерфейсы в Kotlin похожи на интерфейсы в Java 8 и могут содержать абстрактные методы и реализованные методы с телом. Классы могут реализовывать один или несколько интерфейсов.
kotlin
Полиморфизм:
Полиморфизм в Kotlin достигается за счет возможности работать с объектами разных классов через общий базовый тип (класс или интерфейс). Это позволяет вызывать методы, специфичные для конкретного типа объекта, во время выполнения.
kotlin
В этом примере render работает с любым объектом, реализующим Drawable. Вызов drawable.draw() будет выполнять реализацию метода draw для конкретного типа объекта (Square в данном случае).
Отличие между наследованием классов и реализацией интерфейсов:
Таблица сравнения:
| Особенность | Наследование класса | Реализация интерфейса |
|---|---|---|
| Тип связи | is-a | Способность / Контракт |
| Множественность | Одиночное | Множественное |
| Состояние | Наследует состояние базового класса | Не наследует состояние |
| Реализация методов | Может содержать реализацию | Может содержать реализацию по умолчанию (с Java 8) |