Sobes.tech
Middle

Дар бораи хусусиятҳои кор бо мерос ва намояндагӣ дар Kotlin чӣ гуна аст?

sobes.tech AI

Ҷавоб аз AI

Дар Kotlin, мерослият ба дефолт баста баста баста (final), ва синфҳо ва усулҳо бояд ба таври равшан open нишон дода шаванд, то имконпазирии мерос ва ивазкуниро таъмин кунанд. Мерос танҳо аз як синф дастгирӣ мешавад, аммо метавон чандин интерфейсҳоро татбиқ кард.

Дар мерос, конструктори синфи асосӣ пас аз конструктори синфи таҳияшуда даъват мешавад:

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 Кор мекунад тавассути интерфейсҳо

Делегатсия аксар вақт нисбат ба мерос барои ба даст овардани флексибиллик ва дурӣ аз мушкилоти "синфи асосии заиф" беҳтар аст.