Erklären Sie, wie das Schlüsselwort 'super' in der Kotlin-Sprache funktioniert.
sobes.tech KI
Antwort von AI
Das Schlüsselwort super wird verwendet, um auf Mitglieder (Eigenschaften, Methoden) der Elternklasse aus der Kindklasse zuzugreifen.
Hauptverwendungszwecke:
-
Aufruf des Konstruktors der Elternklasse: Wird häufig im Konstruktor der Kindklasse verwendet, um den entsprechenden Konstruktor des Elternteils aufzurufen. Dies ist obligatorisch, wenn die Elternklasse einen primären Konstruktor mit Parametern hat.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Der Konstruktor von Child ruft den Konstruktor von Parent auf, // indem er den Parameter name übergibt. } -
Zugriff auf die Mitglieder der Elternklasse, die in der Kindklasse überschrieben wurden: Ermöglicht den Zugriff auf die Implementierung einer Methode oder Eigenschaft in der Elternklasse, auch wenn sie in der Kindklasse überschrieben wurden (mit
override).open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Aufruf von greet() aus Base println("Hello from Derived") } override val value: Int = 2 get() { println("Zugriff auf Derived-Wert") return super.value + 1 // Zugriff auf value aus Base } } -
Zugriff auf Mitglieder eines bestimmten Supertyps (bei Mehrfachvererbung von Schnittstellen): Wenn eine Klasse mehrere Schnittstellen implementiert, die Mitglieder mit gleichen Namen haben, ermöglicht
superin Verbindung mit der Angabe des Schnittstellennamens in spitzen Klammern (super<TypeName>) eine eindeutige Referenzierung.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Aufruf von foo() aus MyInterface1 super<MyInterface2>.foo() // Aufruf von foo() aus MyInterface2 } }