Paaiškinkite, kaip veikia raktažodis 'super' Kotlin kalboje.
sobes.tech AI
Atsakymas iš AI
Raktinis žodis super naudojamas prieiti prie tėvų klasės narių (savybių, metodų) iš vaikų klasės.
Pagrindiniai naudojimo būdai:
-
Tėvų klasės konstruktoriaus iškvietimas: Dažnai naudojama vaikų klasės konstruktoriuje, kad iškviestų atitinkamą tėvų konstruktorių. Tai yra būtina, jei tėvų klasė turi pagrindinį konstruktorių su parametrais:
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Child konstruktorius iškviečia Parent konstruktorių, // perduodamas parametrą name. } -
Prieiga prie tėvų klasės perrašytų narių: Leidžia kreiptis į tėvų klasės metodo ar savybės įgyvendinimą, net jei jie buvo perrašyti (naudojant
override) vaikų klasėje:open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Kviečia Base greet() println("Hello from Derived") } override val value: Int = 2 get() { println("Accessing Derived value") return super.value + 1 // Prieiga prie Base value } } -
Prieiga prie konkretaus supertipų narių (dėl kelių įgyvendinamų sąsajų): Jei klasė įgyvendina kelias sąsajas, kurios turi vienodų pavadinimų narius,
superkartu su sąsajos pavadinimu skliausteliuose (super<TypeName>) leidžia aiškiai nurodyti, prie kurio nario ir kokios sąsajos kreiptis:interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Kviečia MyInterface1 foo() super<MyInterface2>.foo() // Kviečia MyInterface2 foo() } }