Sobes.tech
Middle

Kotlin-ში მემკვიდრეობისა და დელეგირების მუშაობის რა მახასიათებლები არსებობს?

sobes.tech AI

პასუხი AI-სგან

Kotlin-да мурасымдуулук алдын ала жабык (final) болуп саналат, жана мурасымдуулук жана кайра аныктоо мүмкүнчүлүгүн алуу үчүн класстар жана методдорду ачык белгилөө керек. Жөн гана бир класс боюнча мурасымдуулук колдоого алынат, бирок көптөгөн интерфейстерди ишке ашырууга болот.

Мурасымдуулук учурунда негизги класс конструктору мурасымдуу класс конструкторунан кийин чакырылат:

open class Base(val name: String) {
    init { println("Base инициализациясы") }
    open fun greeting() { println("Baseдан салам") }
}

class Derived(name: String, val age: Int) : Base(name) {
    init { println("Derived инициализациясы") }
    override fun greeting() { println("Derivedдан салам") }
}

Kotlinдеги делегирлөө by ачкыч сөзү менен ишке ашырылат. Ал интерфейстин ишке ашырылышын башка объектке өткөрүүгө мүмкүндүк берет. Бул реализацияны мурасымдуулукка салыштырмалуу ыңгайлуу альтернатива (түздөн-түз колдоого алынбайт).

interface Greeter {
    fun greet(name: String)
}

class GreeterImpl : Greeter {
    override fun greet(name: String) {
        println("Салам, $name!")
    }
}

class DelegateGreeter(greeter: Greeter) : Greeter by greeter

Бул жерде DelegateGreeter greet методунун чакыруусун greeter объектисине делегирлөөдө.

Туура салыштыруу:

Өзгөчөлүк Мурасымдуулук Делегирлөө (by)
Байланыш "is a" (бар) "has a" (бар)
Ишке ашыруу Түз кеңейтүү класс аркылуу Реализацияны объектке өткөрүү
Көптөгөндүк Бир негизги класс Көптөгөн интерфейстер
Иштөө жөндөмдүүлүгү Азыркыга караганда чектелүү Көбүрөөк ийкемдүү, композиция
Көрүнүшү protected жана public мурасымдуу Интерфейстер аркылуу иштейт

Делегирлөө көбүнесе мурасымдуулукка караганда ийкемдүүлүк жана "сөөккө жарамдуу негизги класс" көйгөйлөрүнөн алыс болуу үчүн артыкчылыкка ээ.