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