Spiega come funziona la parola chiave 'super' nel linguaggio Kotlin.
sobes.tech AI
Risposta dell'AI
La parola chiave super viene utilizzata per accedere ai membri (proprietà, metodi) della classe genitore dalla classe figlia.
Le principali modalità di utilizzo:
-
Chiamata al costruttore della classe genitore: Spesso usata nel costruttore della classe figlia per chiamare il costruttore corrispondente del genitore. Questo è obbligatorio se la classe genitore ha un costruttore primario con parametri.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Il costruttore di Child chiama quello di Parent, // passando il parametro name. } -
Accesso ai membri della classe genitore, ridichiarati nella classe figlia: Permette di accedere all’implementazione di un metodo o proprietà nella classe genitore, anche se sono stati ridichiarati (con
override) nella classe figlia.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Chiamata a greet() da Base println("Hello from Derived") } override val value: Int = 2 get() { println("Accesso al valore di Derived") return super.value + 1 // Accesso a value da Base } } -
Accesso ai membri di un tipo superiore specifico (nel caso di ereditarietà multipla di interfacce): Se una classe implementa più interfacce che hanno membri con nomi uguali,
superinsieme alla specifica del nome dell’interfaccia tra parentesi angolari (super<TypeName>) permette di indicare in modo univoco a quale membro di quale interfaccia si riferisce.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Chiamata a foo() di MyInterface1 super<MyInterface2>.foo() // Chiamata a foo() di MyInterface2 } }