Aké vlastnosti existujú pri práci s dedičstvom a delegovaním v Kotlin?
sobes.tech AI
Odpoveď od AI
V Kotlinu je dedičstvo vo výchozom nastavení zatvorené (final), a triedy a metódy musia byť výslovne označené ako open, aby bolo možné dedičstvo a prepísanie. Podporované je dedičstvo iba z jednej triedy, ale je možné implementovať viacero rozhraní.
Pri dedičstve sa konštruktor základnej triedy volá po konštruktore odvodenéj triedy:
open class Base(val name: String) {
init { println("Inicializácia Base") }
open fun greeting() { println("Ahoj z Base") }
}
class Derived(name: String, val age: Int) : Base(name) {
init { println("Inicializácia Derived") }
override fun greeting() { println("Ahoj z Derived") }
}
Delegácia v Kotlin je implementovaná na úrovni jazyka pomocou kľúčového slova by. Umožňuje odovzdať implementáciu rozhrania inému objektu. Je to pohodlná alternatíva k priamej dedičnosti implementácie.
interface Greeter {
fun greet(name: String)
}
class GreeterImpl : Greeter {
override fun greet(name: String) {
println("Ahoj, $name!")
}
}
class DelegateGreeter(greeter: Greeter) : Greeter by greeter
Tu DelegateGreeter deleguje volanie metódy greet na objekt greeter.
Porovnanie:
| Funkcia | Dedičstvo | Delegácia (by) |
|---|---|---|
| Vzťah | "je" (is a) | "má" (has a) |
| Implementácia | Priame rozšírenie triedy | Prenos implementácie na iný objekt |
| Množstvo | Jedna základná trieda | Viac rozhraní |
| Flexibilita | Menej flexibilné | Flexibilnejšie, cez kompozíciu |
| Viditeľnosť | Dedi protected a public | Funguje cez rozhrania |
Delegácia je často preferovaná pred dedičstvom na dosiahnutie flexibility a vyhýbanie sa problémom "krehkej základnej triedy".