Objasnite kako funkcioni ključna reč 'super' u jeziku Kotlin.
sobes.tech АИ
Одговор од АИ
Ključna riječ super koristi se za pristup članovima (svojstvima, metodama) roditeljske klase iz podklase.
Glavni načini korištenja:
-
Pozivanje konstruktora roditeljske klase: Često se koristi u konstruktoru podklase za pozivanje odgovarajućeg konstruktora roditelja. To je obavezno ako roditeljska klasa ima primarni konstruktor s parametrima.
open class Parent(val name: String) class Child(name: String) : Parent(name) { // Konstruktor Child poziva konstruktor Parent, // prosljeđujući parametar name. } -
Pristup članovima roditeljske klase, prepisanim u podklasi: Omogućava pristup implementaciji metode ili svojstva u roditeljskoj klasi, čak i ako su prepisani (pomoću
override) u podklasi.open class Base { open fun greet() { println("Hello from Base") } open val value: Int = 1 } class Derived : Base() { override fun greet() { super.greet() // Poziv na greet() iz Base println("Hello from Derived") } override val value: Int = 2 get() { println("Pristup vrijednosti Derived") return super.value + 1 // Pristup value iz Base } } -
Pristup članovima određenog supertipa (u slučaju višestrukog nasljeđivanja sučelja): Ako klasa implementira više sučelja koja imaju članove s istim imenima,
superu kombinaciji s navodom imena sučelja u uglastim zagradama (super<TypeName>) omogućava jednoznačno upućivanje na koji član kojeg sučelja se odnosi.interface MyInterface1 { fun foo() { println("MyInterface1 foo") } } interface MyInterface2 { fun foo() { println("MyInterface2 foo") } } class MyClass : MyInterface1, MyInterface2 { override fun foo() { super<MyInterface1>.foo() // Poziv na foo() iz MyInterface1 super<MyInterface2>.foo() // Poziv na foo() iz MyInterface2 } }