Junior
Какви са основните разлики между клас и интерфейс в Kotlin?
sobes.tech AI
Отговор от AI
- Клас: може да съдържа свойства (състояния) и функции (поведение). Може да бъде абстрактен, отворен (за наследяване) или финален. Конструкторите определят начина на създаване на обекти. Поддържа наследяване от един клас и множествена реализация на интерфейси.
- Интерфейс: определя контракт за поведение, който трябва да реализират класовете. Може да съдържа абстрактни декларации на функции и свойства, както и функции с реализация (Java 8+). Не може да съдържа състояния (свойства с бекъп поле). Един клас може да реализира няколко интерфейса. Няма конструктори.
Сравнителна таблица:
| Аспект | Клас | Интерфейс |
|---|---|---|
| Състояние | Може да има свойства със стойност. | Не може да има свойства със стойност (само абстрактни). |
| Конструктори | Могат да съществуват. | Нямат. |
| Реализация | Може да предоставя пълна реализация. | Предоставя частична или пълна реализация (с дефолтни методи). |
| Наследяване | Наследява от един клас. | Реализира множество интерфейси. |
| Инициализация | Може да бъде инстанцирана. | Не може да бъде инстанцирана директно. |
| Тип | Конкретен или абстрактен. | Само контракт за поведение. |
Пример за клас:
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!")
}
}