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