Študijné materiály

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 open by trieda Animal bola final a pokus o dedičnosť class Dog : Animal() by spôsobil chybu kompilácie.

10.1.1 Prečo 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:

Úlohy

Úloha 1

Vytvor open triedu Vozidlo s metódou popis a podtriedu Bicykel.

Úloha 2

Over, že dedenie z triedy bez open spôsobí chybu kompilácie, potom chybu oprav.

Úloha 3

Pridaj do rodičovskej triedy open atribút a vytvor podtriedu, ktorá ho neskôr bude môcť prepísať.