Vysvětlete, jak funguje klíčové slovo 'super' v jazyce Kotlin.
sobes.tech AI
Odpověď od AI
Klíčové slovo super se používá k přístupu k členům (vlastnostem, metodám) rodičovské třídy z podtřídy.
Hlavní způsoby použití:
-
Volání konstruktoru rodičovské třídy: Často se používá v konstruktoru podtřídy k volání odpovídajícího konstruktoru rodiče. To je povinné, pokud má rodičovská třída primární konstruktor s parametry.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Konstruktor Child volá konstruktor Parent, // předáváním parametru name. } -
Přístup k členům rodičovské třídy, které jsou přepsány v podtřídě: Umožňuje přístup k implementaci metody nebo vlastnosti v rodičovské třídě, i když byly přepsány (pomocí
override) v podtřídě.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Volání greet() z Base println("Hello from Derived") } override val value: Int = 2 get() { println("Přístup k hodnotě Derived") return super.value + 1 // Přístup k value z Base } } -
Přístup k členům konkrétního supertypu (v případě vícenásobného dědičnosti rozhraní): Pokud třída implementuje několik rozhraní, která mají členy se stejnými názvy,
superve spojení s uvedením názvu rozhraní v hranatých závorkách (super<TypeName>) umožňuje jednoznačně určit, ke kterému členu kterého rozhraní se 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() // Volání foo() z MyInterface1 super<MyInterface2>.foo() // Volání foo() z MyInterface2 } }