Vysvetlite, ako funguje kľúčové slovo 'super' v jazyku Kotlin.
sobes.tech AI
Odpoveď od AI
Kľúčové slovo super sa používa na prístup k členom (vlastnostiam, metódam) rodičovskej triedy z podtriedy.
Hlavné spôsoby použitia:
-
Volanie konštruktora rodičovskej triedy: Často sa používa v konštruktore podtriedy na volanie zodpovedajúceho konštruktora rodiča. Toto je povinné, ak má rodičovská trieda primárny konštruktor s parametrami.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Konštruktor Child volá konštruktor Parent, // odovzdávajúc parameter name. } -
Prístup k členom rodičovskej triedy, prepísaným v podtriede: Umožňuje pristupovať k implementácii metódy alebo vlastnosti v rodičovskej triede, aj keď boli prepísané (pomocou
override) v podtriede.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Volanie greet() z Base println("Hello from Derived") } override val value: Int = 2 get() { println("Prístup k hodnote Derived") return super.value + 1 // Prístup k value z Base } } -
Prístup k členom konkrétneho supertypu (v prípade viacnásobného dedičstva rozhraní): Ak trieda implementuje viac rozhraní, ktoré majú členov s rovnakými názvami,
superv spojení s uvedením názvu rozhrania v hranatých zátvorkách (super<TypeName>) umožňuje jednoznačne určiť, ku ktorému členovi ktorého rozhrania sa odkazuje.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Volanie foo() z MyInterface1 super<MyInterface2>.foo() // Volanie foo() z MyInterface2 } }