Назад к вопросам
Junior
111
questionbank

Каковы основные различия между классом и интерфейсом в Kotlin?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

  • Класс: может содержать свойства (состояния) и функции (поведение). Может быть абстрактным, открытым (для наследования) или финальным. Конструкторы определяют способ создания объектов. Поддерживает наследование от одного класса и множественную реализацию интерфейсов.
  • Интерфейс: определяет контракт поведения, который должны реализовать классы. Может содержать абстрактные декларации функций и свойств, а также функции с реализацией (Java 8+). Не может содержать состояния (свойства с бэкинговым полем). Класс может реализовать несколько интерфейсов. Не имеет конструкторов.

Сравнительная таблица:

Аспект Класс Интерфейс
Состояние Может иметь свойства со значением. Не может иметь свойства со значением (только абстрактные).
Конструкторы Могут быть. Не имеют.
Реализация Может предоставлять полную реализацию. Предоставляет частичную или полную реализацию (с default-методами).
Наследование Наследует от одного класса. Реализует множество интерфейсов.
Инициализация Может быть инстанциирован. Не может быть инстанциирован напрямую.
Тип Конкретный или абстрактный. Только контракт поведения.

Пример класса:

class Person(val name: String) { // класс с конструктором и свойством
    fun greet() {
        println("Hello, my name is $name")
    }
}

Пример интерфейса:

interface Greeter { // интерфейс с методом
    fun greet()
}

class EnglishGreeter : Greeter { // класс, реализующий интерфейс
    override fun greet() {
        println("Hello!")
    }
}