Sobes.tech
Junior

Millised on peamised erinevused klassi ja liidese vahel Kotlinis?

sobes.tech AI

Vastus AI-lt

  • Klass: võib sisaldada omadusi (seisundeid) ja funktsioone (käitumist). Võib olla abstraktne, avatud (päriluseks) või lõplik. Konstruktorid määravad, kuidas objektid luuakse. Toetab pärandumist ühest klassist ja mitme liidese rakendamist.
  • Liides: määratleb käitumise lepingu, mida klassid peavad rakendama. Võib sisaldada abstraktseid funktsioone ja omadusi ning ka rakendatud funktsioone (Java 8+). Ei saa sisaldada seisundeid (omadusi taustavälja). Klass võib rakendada mitmeid liideseid. Ei oma konstruktorid.

Võrdlustabel:

Aspekt Klass Liides
Seisund Võib omada väärtustega omadusi. Ei saa omada väärtustega omadusi (ainult abstraktsed).
Konstruktorid Võib olla. Ei ole.
Rakendamine Võib pakkuda täielikku rakendust. Pakub osalist või täielikku rakendust (vaikimisi meetoditega).
Pärandum Pärineb ühest klassist. Rakendab mitmeid liideseid.
Initsialiseerimine Võib olla instantsiivne. Ei saa olla otse instantsiivne.
Tüüp Konkreetne või abstraktne. Ainult käitumise leping.

Klassi näide:

class Person(val name: String) { // klass koos konstruktoriga ja omadusega
    fun greet() {
        println("Hello, my name is $name")
    }
}

Liidese näide:

interface Greeter { // liides meetodiga
    fun greet()
}

class EnglishGreeter : Greeter { // rakendav klass
    override fun greet() {
        println("Hello!")
    }
}