Sobes.tech
Junior

Kotlin tilida 'super' kalit so'zining qanday ishlashini tushuntiring.

sobes.tech AI

AIdan javob

Kalit so'z super ota sinfning (xususiyatlar, metodlar) a'zolariga ota sinfdan kirish uchun ishlatiladi.

Asosiy foydalanish usullari:

  1. Ota sinfning konstruktorini chaqirish: Ko'pincha, bolalar sinfining konstruktorida ota sinfning mos konstruktorini chaqirish uchun ishlatiladi. Bu majburiy bo'lsa, ota sinf parametrli asosiy konstruktorga ega bo'lsa.

    open class Parent(val name: String)
    
    class Child(name: String) : Parent(name) {
        // Child konstruktor ota sinf konstruktorini chaqiradi,
        // name parametrini o'tkazib.
    }
    
  2. Bolalar sinfida qayta belgilangan ota sinf a'zolariga kirish: Bu ota sinfdagi metod yoki xususiyatning amalga oshirilishiga kirish imkonini beradi, hatto ular override yordamida qayta belgilangan bo'lsa ham.

    open class Base {
        open fun greet() {
            println("Hello from Base")
        }
    
        open val value: Int = 1
    }
    
    class Derived : Base() {
        override fun greet() {
            super.greet() // Base'dan greet() chaqirish
            println("Derived'dan Salom")
        }
    
        override val value: Int = 2
            get() {
                println("Derived qiymatiga kirish")
                return super.value + 1 // Base'dan value ga kirish
            }
    }
    
  3. Aniq bir supertip a'zolariga kirish (ko'p meros olish holatida): Agar sinf bir nechta interfeyslarni amalga oshirsa, ular bir xil nomli a'zolarga ega bo'lsa, super bilan birga interfeys nomini kiritish (super<TypeName>) orqali qaysi interfeys a'zosi bilan ishlashni aniq belgilash mumkin.

    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 dan foo() chaqirish
            super<MyInterface2>.foo() // MyInterface2 dan foo() chaqirish
        }
    }