Sobes.tech
Middle

Millised omadused on Kotlinis pärimise ja delegeerimisega töötamisel?

sobes.tech AI

Vastus AI-lt

Kotlin pärilikkus on vaikimisi suletud (final), seega klassid ja meetodid tuleb selgelt märkida open, et võimaldada pärilikkust ja ülekirjutamist. Toetatakse ainult ühe klassi pärandamist, kuid saab rakendada mitmeid liideseid.

Pärilikkuse korral kutsutakse põhiklassi konstruktor pärast päriliku klassi konstruktorit:

open class Base(val name: String) {
    init { println("Base initsialiseerimine") }
    open fun greeting() { println("Tervitused Base-st") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived initsialiseerimine") }
    override fun greeting() { println("Tervitused Derived-st") }
}

Kotlinis on delegatsioon rakendatud by võtmesõnaga. See võimaldab edasi anda liidese rakendamise teisele objektile. See on mugav alternatiiv rakendamisele (mis ei ole otseselt toetatud).

interface Greeter {
    fun greet(name: String)
}

class GreeterImpl : Greeter {
    override fun greet(name: String) {
        println("Tere, $name!")
    }
}

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Siin DelegateGreeter delegeerib greet meetodi väljakutse objekti greeter kaudu.

Võrdlus:

Omadus Pärilikkus Delegatsioon (by)
Suhe "is a" (on) "has a" (omab)
Rakendamine Otse klassi laiendamine Rakendamise edastamine objekti kaudu
Mitmekesisus Üks põhiklass Mitmeid liideseid
Paindlikkus Vähem paindlikku Rohkem paindlikkust, kompositsioon
Nähtavus Pärib protected ja public Töötab liideste kaudu

Delegatsioon on sageli eelistatum pärilikkusele, pakkudes paindlikkust ja vältides "hapra baasklassi" probleeme.