Wyjaśnij, jak działa słowo kluczowe 'super' w języku Kotlin.
sobes.tech AI
Odpowiedź od AI
Słowo kluczowe super jest używane do dostępu do członków (właściwości, metod) klasy nadrzędnej z klasy potomnej.
Główne sposoby użycia:
-
Wywołanie konstruktora klasy nadrzędnej: Często używane w konstruktorze klasy potomnej do wywołania odpowiedniego konstruktora klasy nadrzędnej. Jest to obowiązkowe, jeśli klasa nadrzędna ma główny konstruktor z parametrami.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Konstruktor Child wywołuje konstruktor Parent, // przekazując parametr name. } -
Dostęp do członków klasy nadrzędnej, nadpisanych w klasie potomnej: Pozwala na dostęp do implementacji metody lub właściwości w klasie nadrzędnej, nawet jeśli zostały nadpisane (za pomocą
override) w klasie potomnej.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Wywołanie greet() z Base println("Hello from Derived") } override val value: Int = 2 get() { println("Dostęp do wartości Derived") return super.value + 1 // Dostęp do value z Base } } -
Dostęp do członków konkretnego supertypu (w przypadku wielokrotnego dziedziczenia interfejsów): Jeśli klasa implementuje wiele interfejsów, które mają członków o tych samych nazwach,
superwraz z określeniem nazwy interfejsu w nawiasach kątowych (super<TypeName>) pozwala jednoznacznie wskazać, do którego członka którego interfejsu się odwołać.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Wywołanie foo() z MyInterface1 super<MyInterface2>.foo() // Wywołanie foo() z MyInterface2 } }