Sobes.tech
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!")
    }
}