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.