Обяснете как работи ключовата дума 'super' в езика Kotlin.
sobes.tech AI
Отговор от AI
Ключовата дума super се използва за достъп до членове (свойства, методи) на родителския клас от дъщерния клас.
Основни начини на използване:
-
Обаждане на конструктора на родителския клас: Често се използва в конструктора на дъщерния клас за извикване на съответния конструктор на родителя. Това е задължително, ако родителският клас има първичен конструктор с параметри.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Конструкторът на Child извиква конструктора на Parent, // предавайки параметъра name. } -
Достъп до членове на родителския клас, преписани в дъщерния: Позволява да се обърнете към реализацията на метода или свойството в родителския клас, дори ако те са преписани (чрез
override) в дъщерния.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Обаждане на greet() от Base println("Hello from Derived") } override val value: Int = 2 get() { println("Достъп до стойността на Derived") return super.value + 1 // Достъп до value от Base } } -
Достъп до членове на конкретен супертип (в случай на множествено наследяване на интерфейси): Ако клас реализира няколко интерфейса, които имат членове с еднакви имена,
superв съчетание с посочване на името на интерфейса в ъглови скоби (super<TypeName>) позволява ясно да се посочи към кой член на кой интерфейс се отнася.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Обаждане на foo() от MyInterface1 super<MyInterface2>.foo() // Обаждане на foo() от MyInterface2 } }