Sobes.tech
Middle

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".