გთხოვთ, ახსნათ, როგორ მუშაობს '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() } }