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.