Ключевое слово interface
Ключевое слово interface используется для объявления интерфейсов,
которые определяют абстрактные методы и свойства, которые должны быть
реализованы классами. Интерфейсы в Kotlin могут содержать методы
с реализацией по умолчанию и свойства.
Синтаксис
interface InterfaceName {
// абстрактные методы
fun abstractMethod()
// методы с реализацией по умолчанию
fun methodWithDefault() {
// реализация
}
// абстрактные свойства
val abstractProperty: String
// свойства с геттером
val propertyWithGetter: String
get() = "Default value"
}
Пример
Создадим простой интерфейс с абстрактным методом:
interface Drawable {
fun draw()
}
Пример
Реализуем интерфейс в классе:
class Circle : Drawable {
override fun draw() {
println("Drawing circle")
}
}
val circle = Circle()
circle.draw()
Результат выполнения кода:
String "Drawing circle"
Пример
Интерфейс с методом по умолчанию:
interface 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()
Результат выполнения кода:
String "Button clicked"
String "Element is clickable"
Пример
Интерфейс со свойствами:
interface 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)
Результат выполнения кода:
String "John"
String "Object named: John"
Пример
Реализация нескольких интерфейсов:
interface 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()
Результат выполнения кода:
String "A foo"
String "B foo"