Sobes.tech
Middle

Kotlin'da meros va delegatsiya bilan ishlashning qanday xususiyatlari mavjud?

sobes.tech AI

AIdan javob

Kotlin'da meros meros vorislik (final) bo'lib, sinflar va metodlar aniq open bilan belgilanishi kerak, shunda vorislik va ustunlik mumkin bo'ladi. Faqat bitta sinfdan vorislik qo'llab-quvvatlanadi, ammo ko'p interfeyslar amalga oshirilishi mumkin.

Vorislikda, asosiy sinfning konstruktoridan keyin uning konstruktor chaqiriladi:

open class Base(val name: String) {
    init { println("Base ni boshlash") }
    open fun greeting() { println("Base dan Salom") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived ni boshlash") }
    override fun greeting() { println("Derived dan Salom") }
}

Kotlin'da delegatsiya by kalit so'zi yordamida til darajasida amalga oshiriladi. Bu, interfeysning bajarilishini boshqa ob'ektga o'tkazish imkonini beradi. Bu, to'g'ridan-to'g'ri vorislikdan qulayroq alternativ.

interface Greeter {
    fun greet(name: String)
}

class GreeterImpl : Greeter {
    override fun greet(name: String) {
        println("Salom, $name!")
    }
}

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Bu yerda, DelegateGreeter greet metod chaqiruvini greeter ob'ektiga delegatsiya qiladi.

Taqqoslash:

Xususiyat Meroslik Delegatsiya (by)
Aloqa "bir narsa" (is a) "bir narsa" (has a)
Amalga oshirish To'g'ridan-to'g'ri sinfni kengaytirish Ob'ektga amalga oshirish o'tkazish
Ko'pchilik Bir asosiy sinf Ko'p interfeyslar
Moslashuvchanlik Kamroq moslashuvchan Ko'proq moslashuvchan, kompozitsiya orqali
Ko'rinish protected va public meros oladi Interfeyslar orqali ishlaydi

Delegatsiya, moslashuvchanlikni oshirish va "nozik asosiy sinf" muammalaridan qochish uchun odatda vorislikdan afzalroq.