#3 Уроки Kotlin. Введение: интерфейсы

Уроки Kotlin 3

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

Интерфейс определяется с помощью ключевого слова interface:

interface MyInterface {
    fun bar()
    fun foo() {
      // optional body
    }
}

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

Класс или объект может реализовать один или несколько интерфейсов:

class Child : MyInterface {
   fun bar() {
      // body
   }
}

Свойства в интерфейсах

Вы можете объявить свойства в интерфейсе. Свойства объявляются в интерфейсе как абстрактные:

interface MyInterface {
    val property: Int // abstract

    val propertyWithImplementation: String
        get() = "foo"

    fun foo() {
        print(property)
    }
}

class Child : MyInterface {
    override val property: Int = 29
}

Решение проблем с переопределением

При реализации нескольких интерфейсов могут возникнуть конфликты в именах методов. Например:

interface A {
  fun foo() { print("A") }
  fun bar()
}

interface B {
  fun foo() { print("B") }
  fun bar() { print("bar") }
}

class C : A {
  override fun bar() { print("bar") }
}

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

Интерфейсы А и В и объявляют функции foo() и bar(). Оба интерфейса реализуют функцию foo(), однако функцию bar() реализует только интерфейс B. В классе C мы реализовали метод bar(), т. к. реализация его является обязательной. В классе D мы реализуем оба интерфейса (A и B), в связи с чем возникает конфликт. Метод foo() реализуют оба интерфейса и компилятор не знает какой из них выбрать. Мы должны явно указать какой из методов нужно вызывать.

Источник: Interfaces

Комментарии:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *