Leg uit hoe het sleutelwoord 'super' werkt in de Kotlin-taal.
sobes.tech AI
Antwoord van AI
Het sleutelwoord super wordt gebruikt om toegang te krijgen tot leden (eigenschappen, methoden) van de ouderklasse vanuit de kindklasse.
De belangrijkste gebruikswijzen:
-
Aanroepen van de constructor van de ouderklasse: Wordt vaak gebruikt in de constructor van de kindklasse om de bijbehorende constructor van de ouder aan te roepen. Dit is verplicht als de ouderklasse een primaire constructor met parameters heeft.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // De constructor van Child roept de constructor van Parent aan, // door de parameter name door te geven. } -
Toegang tot leden van de ouderklasse, overschreven in de kindklasse: Hiermee kan je de implementatie van een methode of eigenschap in de ouderklasse benaderen, zelfs als ze zijn overschreven (met
override) in de kindklasse.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Aanroep van greet() uit Base println("Hello from Derived") } override val value: Int = 2 get() { println("Toegang tot Derived waarde") return super.value + 1 // Toegang tot value uit Base } } -
Toegang tot leden van een specifiek supertype (bij meervoudige interface-erfenis): Als een klasse meerdere interfaces implementeert die leden met dezelfde naam hebben, maakt
superin combinatie met de naam van de interface tussen hoekige haakjes (super<TypeName>) het mogelijk om duidelijk aan te geven op welk lid van welke interface wordt verwezen.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Aanroep van foo() uit MyInterface1 super<MyInterface2>.foo() // Aanroep van foo() uit MyInterface2 } }