? 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 ya Mbwa au Paka inayorithi kutoka kwa Mnyama bila 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


? 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:


? 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

  1. Kurudia code bila kuandika upya

  2. Uhusiano wa kihierarkia (mzazi → mtoto)

  3. Inarahisisha maendeleo ya programu kubwa

  4. Encapsulation + Inheritance = OOP madhubuti

  5. 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.