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
openna funkciispeakby sme ju nemohli v podtriede prepísať.
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
}
overrideje povinný - bez neho by sme funkciu/atribút nemohli prepísať.
Vytvor open triedu Zviera s metódou zvuk a prepíš ju v triedach Pes a Macka.
Vytvor rodičovskú triedu s open val nazov a v dvoch podtriedach jeho hodnotu prepíš.
Ulož objekty rôznych podtried do zoznamu typu rodičovskej triedy a zavolaj ich prepísanú metódu.