Študijné materiály

Ak chceme v podtriede zmeniť správanie funkcie z rodičovskej triedy, použijeme kľúčové slovo override. Na to, aby sme mohli funkciu prepísať, musí byť v rodičovskej triede označená ako open:

open class Animal {
    open fun speak() {
        println("...")
    }
}

class Dog : Animal() {
    override fun speak() {
        println("Hav!")
    }
}

class Cat : Animal() {
    override fun speak() {
        println("Mnau!")
    }
}

fun main() {
    val dog = Dog()
    val cat = Cat()
    dog.speak()  // Hav!
    cat.speak()  // Mnau!
}

Bez open na funkcii speak by sme ju nemohli v podtriede prepísať.

10.2.1 Override atribútov

Rovnako môžeme prepisovať aj atribúty:

open class Shape {
    open val color: String = "Biela"
}

class Circle : Shape() {
    override val color: String = "Cervena"
}

fun main() {
    val circle = Circle()
    println(circle.color) // Cervena
}

override je povinný - bez neho by sme funkciu/atribút nemohli prepísať.

Úlohy

Úloha 1

Vytvor open triedu Zviera s metódou zvuk a prepíš ju v triedach Pes a Macka.

Úloha 2

Vytvor rodičovskú triedu s open val nazov a v dvoch podtriedach jeho hodnotu prepíš.

Úloha 3

Ulož objekty rôznych podtried do zoznamu typu rodičovskej triedy a zavolaj ich prepísanú metódu.