Назад к вопросам
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!")
}
}