Merosxo’rlik (inheritance) — OOP ning muhim ustuni. U bir sinfga boshqa sinfning barcha xususiyatlarini “meros qilib olish” imkonini beradi. Bu kod takrorlanishini keskin kamaytiradi va sinflarni mantiqiy iyerarxiyaga soladi. “Talaba” va “O’qituvchi” — ikkovi ham “Inson”, demak umumiy xususiyatlarni “Inson”dan meros oladi.
Merosxo’rlik — bir sinf (bola) boshqa sinf (ota) ning xususiyat va metodlarini o’zlashtirishi. Kotlin’da bu ikki nuqta (
:) orqali amalga oshiriladi.
open — merosga ruxsat
Kotlin’da sinflar standart holatda yopiq (meros olib bo’lmaydi). Meros olishga ruxsat berish uchun open kalit so’zi qo’yiladi:
open class Inson(val ism: String) {
fun tanishtir() {
println("Men $ism")
}
}
class Talaba(ism: String, val ball: Int) : Inson(ism)
fun main() {
val t = Talaba("Master Sherkulov", 95)
t.tanishtir() // Inson metodini ishlatadi
println("Ball: ${t.ball}")
}
Men Master Sherkulov
Ball: 95
open class Inson — meros olishga ruxsat berdi. class Talaba(...) : Inson(ism) — Inson dan meros oldi va uning konstruktorini chaqirdi. Diqqat: Kotlin’da open shart — bu tasodifiy merosning oldini oladi.
Metodni qayta yozish (override)
Ota metodini qayta yozish uchun ota metod open, bola metod override bo’lishi kerak:
open class Inson {
open fun rol() {
println("Oddiy inson")
}
}
class Oqituvchi : Inson() {
override fun rol() {
println("O'qituvchi")
}
}
fun main() {
Inson().rol()
Oqituvchi().rol()
}
Oddiy inson
O'qituvchi
Bir xil nomli rol metodi ikki sinfda turlicha ishladi. open fun — qayta yozilishi mumkin, override fun — bola qayta yozgani. Kotlin’da bu kalit so’zlar majburiy — ular kodni aniq va xavfsiz qiladi.
super — ota metodni chaqirish
Override qilingan metod ichida ota versiyasini super bilan chaqirish mumkin:
open class Inson {
open fun salom() = println("Salom!")
}
class Oqituvchi : Inson() {
override fun salom() {
super.salom() // ota metodini chaqiradi
println("Men o'qituvchiman")
}
}
fun main() {
Oqituvchi().salom()
}
Salom!
Men o'qituvchiman
super.salom() ota versiyasini chaqirdi, so’ng bola o’zining qo’shimchasini bajardi.
Xulosa
Bu bo’limda merosxo’rlikni, open bilan merosga ruxsat, : bilan meros olish, override bilan metodni qayta yozish va super ni ko’rib chiqdik. Kotlin’da meros aniq va xavfsiz. Keyingi darsda polimorfizmga o’tamiz.