? Utangulizi
dKatika programu zinazotumia mwelekeo wa object-oriented (OOP), urithi ni kipengele kinachowezesha class moja kurithi tabia na sifa kutoka kwa class nyingine. Kotlin, kama lugha ya kisasa ya OOP, huipa kipaumbele usalama wa muundo wa code kwa kuzuia kurithiwa kiholela. Kwa hiyo, class au method haiwezi kurithiwa bila kuwekwa wazi kwa kutumia open. Katika somo hili, tutajifunza si tu kuhusu jinsi ya kuandika inheritance kwenye Kotlin, bali pia jinsi modifiers mbalimbali zinavyoathiri uwezo wa urithi au upatikanaji wa vipengele vya class.
✅ Maana ya Inheritance
Inheritance ni dhana ya Object-Oriented Programming (OOP) inayoruhusu class moja kurithi mali (properties) na tabia (methods) kutoka kwa class nyingine.
Kwa mfano: Kama tuna class ya
Mnyama, tunaweza kutengeneza class yaMbwaauPakainayorithi kutoka kwaMnyamabila kuandika upya kila kitu.
Supper class na subclass:
class ambayo inarithiwa huitwa parent class yaani mzazi. Hii pia huitwa supper class na class ambayo inarithi huitwa child class yaani mtoto. Hii pi huitwa subclass. Ili class iweze kuruthiwa inahitajika kuwa open yaani open class. Class inaweza kuwa open kwa kuwekewa keyword ya open.
? Lengo la Inheritance
-
Kurudia code (reusability)
-
Kupunguza makosa (less redundancy)
-
Kuweka hierarkia ya class zinazohusiana
-
Kurahisisha matengenezo na upanuzi wa programu
? Maneno Muhimu
| Kipengele | Maelezo |
|---|---|
open class |
Class inayoruhusu kurithiwa (by default class zote Kotlin ni final) |
: (colon) |
Hutumika kuonyesha urithi |
super |
Keyword ya kufikia class ya mzazi kutoka class ya mtoto |
override |
Keyword ya kuandika upya method ya mzazi kwenye mtoto |
? Muundo wa Inheritance
open class Mzazi {
fun salamu() = println("Habari kutoka kwa mzazi")
}
class Mtoto : Mzazi()
Maelezo:
-
Mzazini class ya juu (superclass au base class) -
Mtotoni class ya chini (subclass au derived class) -
Mtotoanarithi functionsalamu()kutokaMzazi
? Mfano Halisi
open class Mnyama(val jina: String) {
fun lala() = println("$jina analala")
fun kula() = println("$jina anakula chakula")
}
class Mbwa(jina: String) : Mnyama(jina) {
fun lia() = println("$jina anabweka: Woof!")
}
fun main() {
val dog = Mbwa("Tommy")
dog.lala()
dog.kula()
dog.lia()
}
Output:
Tommy analala
Tommy anakula chakula
Tommy anabweka: Woof!
? override Method
Kama subclass inahitaji kubadilisha tabia ya method ya superclass, tunatumia override.
open class Mnyama {
open fun sauti() = println("Mnyama anatoa sauti")
}
class Paka : Mnyama() {
override fun sauti() = println("Paka anasema: Meow!")
}
? super Keyword
Unapotaka kutumia method ya mzazi (superclass) ndani ya class ya mtoto, tumia super.
open class Mzazi {
open fun salamu() = println("Habari kutoka kwa mzazi")
}
class Mtoto : Mzazi() {
override fun salamu() {
super.salamu()
println("Habari kutoka kwa mtoto")
}
}
? Vidokezo Muhimu
| Kipengele | Sheria |
|---|---|
Kotlin haitumii extends kama Java |
Badala yake tumia : colon |
Class zote ziko final kwa default |
Ili kurithiwe, tumia open keyword |
Methods pia zinapaswa kuwa open |
Ili ziweze ku-overrideiwa |
? Mfano wa Kawaida wa Inheritance
open class Mfanyakazi(val jina: String) {
open fun fanyaKazi() {
println("$jina anafanya kazi ya kawaida")
}
}
class Mwalimu(jina: String) : Mfanyakazi(jina) {
override fun fanyaKazi() {
println("$jina anafundisha somo la Hisabati")
}
}
✅ Faida za Inheritance
-
Kurudia code bila kuandika upya
-
Uhusiano wa kihierarkia (mzazi → mtoto)
-
Inarahisisha maendeleo ya programu kubwa
-
Encapsulation + Inheritance = OOP madhubuti
-
Matengenezo rahisi (updates za class ya mzazi huathiri watoto wake)
❌ Vitu vya Kuepuka
| Hatari | Maelezo |
|---|---|
| Overuse ya inheritance | Badala yake tumia composition inapowezekana |
Kuandika class bila open |
Itazuiwa kurithiwa |
Kutumia super visivyo |
Huweza kusababisha bugs kwenye override methods |
? Hitimisho
Inheritance ni moja ya nguzo kuu za OOP katika Kotlin. Kwa kuitumia vizuri, unaweza kujenga mifumo yenye muundo thabiti, inayoweza kupanuka, na rahisi kudhibiti.