? Utangulizi

Katika programming yenye mwelekeo wa vitu (OOP), polymorphism ni dhana muhimu inayomaanisha “uwezo wa kuwa katika maumbo mbalimbali.” Katika Kotlin, hii inamaanisha kuwa method moja inaweza kutenda kwa njia tofauti kutegemeana na context yake. Kwa mfano, class ya mzazi inaweza kuwa na method sauti(), lakini class za watoto kama Mbwa au Paka zinaweza kuifunika method hiyo kwa tabia tofauti. Polymorphism huongeza flexibility, reusability na scalability ya code katika programu kubwa.


 

? 1. Maana ya Polymorphism

Polymorphism ni neno la Kigiriki linalomaanisha “maumbo mengi.” Katika Kotlin, inamaanisha kuwa object au method moja inaweza kutumika kwa namna tofauti kulingana na muktadha.

Aina kuu za polymorphism:


? 2. Method Overriding (Run-time Polymorphism)

Ni pale ambapo subclass inabadilisha tabia ya method iliyo katika superclass kwa kutumia override.

Mfano:

open class Mnyama {
    open fun sauti() = println("Mnyama anatoa sauti")
}

class Mbwa : Mnyama() {
    override fun sauti() = println("Mbwa anabweka: Woof!")
}

class Paka : Mnyama() {
    override fun sauti() = println("Paka anasema: Meow!")
}

fun toaSauti(m: Mnyama) {
    m.sauti()
}
fun main() {
    val mbwa = Mbwa()
    val paka = Paka()
    toaSauti(mbwa)
    toaSauti(paka)
}

Output:

Mbwa anabweka: Woof!
Paka anasema: Meow!

✅ Hapa function toaSauti() haitambui ni class gani – inapokea Mnyama, lakini anapotumwa Mbwa au Paka, tabia hubadilika kulingana na override. Hii ndiyo polymorphism.


? 3. Method Overloading (Compile-time Polymorphism)

Ni pale ambapo method moja huandikwa zaidi ya mara moja ndani ya class lakini kwa saini tofauti (parameters tofauti).

Mfano:

class Hesabu {
    fun jumlisha(a: Int, b: Int) = a + b
    fun jumlisha(a: Double, b: Double) = a + b
    fun jumlisha(a: Int, b: Int, c: Int) = a + b + c
}
fun main() {
    val h = Hesabu()
    println(h.jumlisha(3, 4))           // 7
    println(h.jumlisha(2.5, 3.5))       // 6.0
    println(h.jumlisha(1, 2, 3))        // 6
}

Hii ni compile-time polymorphism, kwa sababu compiler huamua ni version ipi ya method itumike kulingana na aina ya data.


? 4. Faida za Polymorphism


? Mifano Zaidi kwa Uelewa

? Mfano wa Wanyama

fun toaSautiKwaWanyama(wanyama: List<Mnyama>) {
    for (m in wanyama) {
        m.sauti()
    }
}

fun main() {
    val wanyama = listOf(Mbwa(), Paka(), Mnyama())
    toaSautiKwaWanyama(wanyama)
}

? Mfano wa Simu

open class Simu {
    open fun piga() = println("Piga simu ya kawaida")
}

class SmartSimu : Simu() {
    override fun piga() = println("Piga simu ya kisasa kupitia app")
}

? Hitimisho

Polymorphism ni nguzo ya tatu ya OOP inayowezesha object au method moja kufanya kazi kwa namna tofauti kulingana na muktadha. Katika Kotlin, polymorphism hutekelezwa kupitia method overloading (compile-time) na method overriding (run-time). Kwa kutumia open, override, na inheritance kwa usahihi, tunaweza kujenga programu zinazotumika tena, zinazobadilika, na rahisi kutunza.