Ներկայացրեք, թե ինչպես է աշխատում '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() // Կոչ է անում Base-ի greet() println("Hello from Derived") } override val value: Int = 2 get() { println("Accessing Derived value") return super.value + 1 // Հասանելիություն Base-ի value-ին } } -
Հասանելիություն կոնկրետ սուպերտիպի անդամներին (միաժամանակյա բազմաբնույթ ինտերֆեյսների դեպքում): Եթե դասը իրականացնում է մի քանի ինտերֆեյս, որոնք ունեն նույնանուն անդամներ, ապա
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() // Կոչ է անում MyInterface1-ի foo() super<MyInterface2>.foo() // Կոչ է անում MyInterface2-ի foo() } }