Ключевое слово interface

Ключевое слово interface используется для объявления интерфейсов, которые определяют абстрактные методы и свойства, которые должны быть реализованы классами. Интерфейсы в Kotlin могут содержать методы с реализацией по умолчанию и свойства.

Синтаксис

kotlininterface InterfaceName {
  // абстрактные методы
  fun abstractMethod()
  
  // методы с реализацией по умолчанию
  fun methodWithDefault() {
    // реализация
  }
  
  // абстрактные свойства
  val abstractProperty: String
  
  // свойства с геттером
  val propertyWithGetter: String
    get() = "Default value"
}

Пример

Создадим простой интерфейс с абстрактным методом:

kotlininterface Drawable {
  fun draw()
}

Пример

Реализуем интерфейс в классе:

kotlinclass Circle : Drawable {
  override fun draw() {
    println("Drawing circle")
  }
}

val circle = Circle()
circle.draw()

Результат выполнения кода:

kotlinString "Drawing circle"

Пример

Интерфейс с методом по умолчанию:

kotlininterface Clickable {
  fun click()
  fun show() = println("Element is clickable")
}

class Button : Clickable {
  override fun click() {
    println("Button clicked")
  }
}

val button = Button()
button.click()
button.show()

Результат выполнения кода:

kotlinString "Button clicked"
String "Element is clickable"

Пример

Интерфейс со свойствами:

kotlininterface Named {
  val name: String
  val description: String
    get() = "Object named: $name"
}

class Person(override val name: String) : Named

val person = Person("John")
println(person.name)
println(person.description)

Результат выполнения кода:

kotlinString "John"
String "Object named: John"

Пример

Реализация нескольких интерфейсов:

kotlininterface A {
  fun foo() = println("A foo")
}

interface B {
  fun foo() = println("B foo")
}

class C : A, B {
  override fun foo() {
    super<A>.foo()
    super<B>.foo()
  }
}

val c = C()
c.foo()

Результат выполнения кода:

kotlinString "A foo"
String "B foo"

Смотрите также

  • ключевое слово class,
    которое используется для объявления классов
  • ключевое слово abstract,
    которое используется для объявления абстрактных классов
  • ключевое слово override,
    которое используется для переопределения методов
  • ключевое слово open,
    которое используется для разрешения наследования