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.