Sobes.tech
Junior

Jaké jsou hlavní rozdíly mezi třídou a rozhraním v Kotlinu?

sobes.tech AI

Odpověď od AI

  • Třída: může obsahovat vlastnosti (stavy) a funkce (chování). Může být abstraktní, otevřená (pro dědění) nebo finální. Konstruktor určuje způsob vytváření objektů. Podporuje dědění z jedné třídy a vícenásobnou implementaci rozhraní.
  • Rozhraní: definuje smlouvu o chování, kterou musí třídy implementovat. Může obsahovat abstraktní deklarace funkcí a vlastností, stejně jako funkce s implementací (Java 8+). Nemůže obsahovat stavy (vlastnosti s podpůrným polem). Třída může implementovat více rozhraní. Nemá konstruktory.

Porovnávací tabulka:

Aspekt Třída Rozhraní
Stav Může mít vlastnosti s hodnotou. Nemůže mít vlastnosti s hodnotou (pouze abstraktní).
Konstruktor Mohou existovat. Nemají.
Implementace Může poskytovat úplnou implementaci. Poskytuje částečnou nebo úplnou implementaci (s výchozími metodami).
Dědění Dědí od jedné třídy. Implementuje více rozhraní.
Inicializace Může být instanciována. Nemůže být přímo instanciována.
Typ Konkrétní nebo abstraktní. Pouze smlouva o chování.

Příklad třídy:

class Person(val name: String) { // třída s konstruktor a vlastností
    fun greet() {
        println("Hello, my name is $name")
    }
}

Příklad rozhraní:

interface Greeter { // rozhraní s metodou
    fun greet()
}

class EnglishGreeter : Greeter { // třída implementující rozhraní
    override fun greet() {
        println("Hello!")
    }
}