Izskaidrojiet, kā darbojas atslēgvārds 'super' Kotlin valodā.
sobes.tech AI
Atbilde no AI
Galvenais vārds super tiek izmantots, lai piekļūtu vecāku klases locekļiem (īpašībām, metodēm) no bērnu klases.
Galvenie lietošanas veidi:
-
Vecāku klases konstruktora izsaukšana: Bieži tiek izmantots bērnu klases konstruktora iekšienē, lai izsauktu atbilstošo vecāku konstruktora. Tas ir obligāti, ja vecāku klasei ir galvenais konstruktors ar parametriem:
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Child konstruktors izsauc Parent konstruktoru, // nododot parametru name. } -
Pieeja vecāku klases pārdefinētajiem locekļiem: ļauj piekļūt vecāku klases metodes vai īpašības realizācijai, pat ja tās ir pārdefinētas (izmantojot
override) bērnu klases iekšienē:open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Izsauc Base metodi greet() println("Hello from Derived") } override val value: Int = 2 get() { println("Pieeja Derived vērtībai") return super.value + 1 // Pieeja Base vērtībai } } -
Pieeja konkrētam supertipa loceklim (ja ir vairākas interfaces): Ja klase realizē vairākas interfaces, kas satur vienādus locekļus,
superkopā ar interfaces nosaukumu iekavās (super<TypeName>) ļauj precīzi norādīt, uz kuru locekli un no kura interface vērsieties:interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Izsauc MyInterface1 foo() super<MyInterface2>.foo() // Izsauc MyInterface2 foo() } }