Sobes.tech
Junior

Aké sú hlavné rozdiely medzi triedou a rozhraním v Kotlin?

sobes.tech AI

Odpoveď od AI

  • Trieda: môže obsahovať vlastnosti (stavy) a funkcie (správanie). Môže byť abstraktná, otvorená (pre dedenie) alebo finálna. Konštruktory určujú spôsob vytvárania objektov. Podporuje dedenie z jednej triedy a viacnásobnú implementáciu rozhraní.
  • Rozhranie: definuje zmluvu správania, ktorú musia implementovať triedy. Môže obsahovať abstraktné deklarácie funkcií a vlastností, ako aj funkcie s implementáciou (Java 8+). Nemôže obsahovať stavy (vlastnosti s podporným poľom). Trieda môže implementovať viac rozhraní. Nemá konštruktory.

Porovnávacia tabuľka:

Aspekt Trieda Rozhranie
Stav Môže mať vlastnosti s hodnotou. Nemôže mať vlastnosti s hodnotou (len abstraktné).
Konštruktory Môžu existovať. Nemajú.
Implementácia Môže poskytovať úplnú implementáciu. Poskytuje čiastočnú alebo úplnú implementáciu (s predvolenými metódami).
Dedenecké vzťahy Dedí od jednej triedy. Implementuje viac rozhraní.
Inicializácia Môže byť inštancovaná. Nemôže byť priamo inštancovaná.
Typ Konkrétny alebo abstraktný. Len zmluva o správaní.

Príklad triedy:

class Person(val name: String) { // trieda s konštruktorom a vlastnosťou
    fun greet() {
        println("Hello, my name is $name")
    }
}

Príklad rozhrania:

interface Greeter { // rozhranie s metódou
    fun greet()
}

class EnglishGreeter : Greeter { // trieda, ktorá implementuje rozhranie
    override fun greet() {
        println("Hello!")
    }
}