Sobes.tech
Middle

Ce caracteristici există în lucrul cu moștenirea și delegarea în Kotlin?

sobes.tech AI

Răspuns de la AI

În Kotlin, moștenirea implicită este închisă (final), iar clasele și metodele trebuie marcate explicit ca open pentru a permite moștenirea și suprascrierea. Se suportă moștenirea doar de la o singură clasă, dar se pot implementa multiple interfețe.

La moștenire, constructorul clasei de bază este apelat după constructorul clasei derivate:

open class Base(val name: String) {
    init { println("Inițializare Base") }
    open fun greeting() { println("Salut din Base") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Inițializare Derived") }
    override fun greeting() { println("Salut din Derived") }
}

Delegarea în Kotlin se implementează la nivel de limbaj folosind cuvântul cheie by. Permite transferul implementării unei interfețe către un alt obiect. Este o alternativă convenabilă la moștenirea directă a implementării.

interface Greeter {
    fun greet(name: String)
}

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

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Aici, DelegateGreeter delegă apelul metodei greet către obiectul greeter.

Comparativ:

Caracteristică Moștenire Delegare (by)
Relație "este un" (is a) "are" (has a)
Implementare Extindere directă a clasei Transfer de implementare către un obiect
Multiplicitate O singură clasă de bază Multe interfețe
Flexibilitate Mai puțin flexibilă Mai flexibil, prin compoziție
Vizibilitate Moștenește protected și public Funcționează prin interfețe

Delegarea este adesea preferată în locul moștenirii pentru a obține flexibilitate și a evita problemele "clasei de bază fragile".