Sobes.tech
Junior

Koje su glavne razlike između klase i interfejsa u Kotlinu?

sobes.tech АИ

Одговор од АИ

  • Класа: може да садржи својства (статусе) и функције (понашање). Може бити апстрактна, отворена (за наследство) или финална. Конструктори одређују начин креирања објеката. Подржава наследство од једне класе и мултипле имплементацију интерфејса.
  • Интерфејс: дефинише уговор понашања који класе морају имплементирати. Може садржати апстрактне декларације функција и својстава, као и функције са имплементацијом (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!")
    }
}