Sobes.tech
Middle

Kādas iezīmes ir darbā ar mantošanu un deleģēšanu Kotlin?

sobes.tech AI

Atbilde no AI

Kotlin mantošanas pēc noklusējuma ir slēgta (final), tāpēc klases un metodes ir jāatzīmē kā open, lai būtu iespējams mantošana un pārrakstīšana. Atbalsta tikai vienas klases mantošanu, bet ir iespējams realizēt vairākus interfeisus.

Mantošanas laikā pamata klases konstruktors tiek izsaukts pēc apakšklases konstruktora:

open class Base(val name: String) {
    init { println("Base inicializācija") }
    open fun greeting() { println("Sveiciens no Base") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived inicializācija") }
    override fun greeting() { println("Sveiciens no Derived") }
}

Kotlin valodā delegēšana tiek īstenota ar atslēgvārdu by. Tas ļauj nodot interfeisa realizāciju citam objektam. Tas ir ērtāks alternatīvs risinājums realizācijai (kas tieši netiek atbalstīts).

interface Greeter {
    fun greet(name: String)
}

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

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Šeit DelegateGreeter deleģē greet metodes izsaukumu objektam greeter.

Salīdzinājums:

Īpašība Mantošana Delegēšana (by)
Attiecība "is a" (ir) "has a" (ir)
Realizācija Tieša klases paplašināšana Realizācijas nodošana objektam
Daudzskaitlība Viena pamatklase Daudzas interfeisa realizācijas
Elastība Mazāk elastīga Elastīgāka, kompozīcija
Redzamība Manto protected un public Darbojas caur interfeisiem

Delegēšana bieži ir vēlams risinājums, lai sasniegtu elastību un izvairītos no "trausas bāzes klases" problēmām.