Введение в интерфейсы в Kotlin
Интерфейс задает контракт: какие команды должен уметь объект, если класс его реализует. В интерфейсе перечисляют имена методов и свойств без привязки к конкретным полям класса.
Абстрактный класс тоже может требовать реализации методов у потомков, но обычно хранит общее состояние и готовый код. Интерфейс описывает только поведение снаружи: «умеет рисоваться», «умеет считать площадь», «умеет сохраняться на диск».
В Kotlin интерфейс объявляют словом interface
вместо class. Экземпляр интерфейса создать
нельзя - нужен класс, который реализует все обязательные
члены контракта.
interface Drawable {
fun draw()
}
Класс подключает интерфейс после двоеточия и помечает
реализацию словом override. Термин «реализует»
здесь уместнее, чем «наследует»: интерфейс не хранит
данные сам по себе, а навешивает на тип набор обязанностей.
class Circle : Drawable {
override fun draw() {
println("circle")
}
}
Один класс может реализовать несколько интерфейсов, а сами интерфейсы могут наследовать друг друга. Так собирают гибкие иерархии без лишних родительских классов.
Дальше раздел пройдет по шагам: объявление методов
и свойств, реализация по умолчанию, несколько интерфейсов
у одного класса, наследование контрактов и проверка типа
оператором is.