Všetky triedy v Kotline sú implicitne final, čo znamená, že z nich nemôžeme dediť. Ak chceme z triedy dediť, musíme ju označiť kľúčovým slovom open:
open class Animal {
fun breathe() {
println("Dycham")
}
}
class Dog : Animal() {
fun bark() {
println("Hav!")
}
}
fun main() {
val dog = Dog()
dog.breathe() // Dycham
dog.bark() // Hav!
}
Bez
openby triedaAnimalbolafinala pokus o dedičnosťclass Dog : Animal()by spôsobil chybu kompilácie.
final?Kotlin používa final ako predvolené nastavenie z bezpečnostných dôvodov. Ak chceme dediť, musíme sa explicitne rozhodnúť pomocou open. Toto je rozdiel oproti napríklad Jave, kde sú triedy open implicitne.
Toto pravidlo platí aj pre členy triedy - ak chceme niečo prepísať v podtriede, musíme to označiť ako open:
Vytvor open triedu Vozidlo s metódou popis a podtriedu Bicykel.
Over, že dedenie z triedy bez open spôsobí chybu kompilácie, potom chybu oprav.
Pridaj do rodičovskej triedy open atribút a vytvor podtriedu, ktorá ho neskôr bude môcť prepísať.