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