Sobes.tech
Middle

Milyen jellemzői vannak az öröklés és delegálás kezelésének Kotlinban?

sobes.tech MI

Válasz az MI-től

Kotlinben az öröklődés alapértelmezés szerint zárt (final), és az osztályokat és metódusokat kifejezetten open-ként kell megjelölni, hogy öröklés és felülírás legyen lehetőség. Csak egy osztályból származhatunk, de több interfészt is megvalósíthatunk.

Öröklés esetén az alap osztály konstruktorát a leszármazott konstruktorát követően hívják meg:

open class Base(val name: String) {
    init { println("Base inicializálása") }
    open fun greeting() { println("Helló a Base-ből") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived inicializálása") }
    override fun greeting() { println("Helló a Derived-ből") }
}

A Kotlinban a delegálás a nyelv szintjén valósul meg a by kulcsszóval. Lehetővé teszi egy interfész implementációjának átadását egy másik objektumnak. Ez kényelmes alternatíva a közvetlen örökléshez képest.

interface Greeter {
    fun greet(name: String)
}

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

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Itt a DelegateGreeter a greet metódus hívását a greeter objektumnak delegálja.

Összehasonlítás:

Jellemző Öröklődés Delegálás (by)
Kapcsolat "egy valami" (is a) "valaminek a része" (has a)
Megvalósítás Közvetlen osztálybővítés Átadás egy másik objektumnak a megvalósítást
Többszörös Egy alap osztály Több interfész
Rugalmasság Kevésbé rugalmas Rugalmasabb, komponálással
Láthatóság protected és public öröklődik Interfészeken keresztül működik

A delegálás gyakran előnyösebb az öröklésnél, hogy rugalmasságot érjünk el és elkerüljük a "törékeny alap osztály" problémákat.