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

Класс: может содержать свойства (состояния) и функции (поведение).

Короткий ответ

Что ответить на собеседовании

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

Подробный разбор

Ответ с пояснениями

  • Класс: может содержать свойства (состояния) и функции (поведение). Может быть абстрактным, открытым (для наследования) или финальным. Конструкторы определяют способ создания объектов. Поддерживает наследование от одного класса и множественную реализацию интерфейсов.
  • Интерфейс: определяет контракт поведения, который должны реализовать классы. Может содержать абстрактные декларации функций и свойств, а также функции с реализацией (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!")
    }
}

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее