Sobes.tech
Junior

Kotlin-də irsiyyət və çoxşəkillik necə təşkil olunub?

sobes.tech Süni İntellekt

AI-dan cavab

Kotlin-də irsiyyət mexanizmlər vasitəsilə həyata keçirilir. Siniflər yalnız bir başqa sinifdən irs edə bilər (tək irsiyyət), lakin çoxlu interfeysləri tətbiq edə bilər.

Varsayılan olaraq, Kotlin-də bütün siniflər 'final'dır, yəni irs edilə bilməzlər. İrsiyyətə icazə vermək üçün, sinif açıq şəkildə open açar sözü ilə işarələnməlidir.

Siniflərin irsi:

open class Shape { // Əsas sinif, open kimi işarələnmiş
    open fun draw() { // Yüksəldilə bilən metod
        println("Formanın çəkilməsi")
    }
}

class Circle : Shape() { // Shape-dən irs edir
    override fun draw() { // Metodu üstələyir
        println("Dairə çəkilir")
    }
}

Törəmə sinifin konstruktorunda, əsas sinifin konstruktoru açıq və ya qapalı şəkildə çağırılmalıdır.

Interfeysler:

Kotlin-də interfeysler Java 8-dəki kimi, abstrakt metodlar və standart implementasiyaya malik metodlar ehtiva edə bilər. Siniflər bir və ya bir neçə interfeysi tətbiq edə bilər.

interface Drawable {
    fun draw() // Abstrakt metod
    fun description() { // Standart implementasiya ilə metod
        println("Bu, çəkilə bilən obyekt")
    }
}

class Square : Drawable {
    override fun draw() { // Abstrakt metodun tətbiqi
        println("Dördbucaq çəkilir")
    }
    // description() istəyə bağlı olaraq üstələnə bilər
}

Polimorfizm:

Kotlin-də polimorfizm, ümumi bazar tip (sinif və ya interfeys) vasitəsilə müxtəlif siniflərin obyektləri ilə işləmək imkanı ilə əldə edilir. Bu, obyektin faktiki tipinə görə metodların çağırılmasına imkan verir.

fun render(drawable: Drawable) {
    drawable.draw() // Ob'ektin faktiki tipinə görə draw() metodunu çağırır
    drawable.description()
}

fun main() {
    val circle: Shape = Circle() // Circle obyekti Shape kimi qəbul edilir
    circle.draw() // Polimorfizm sayəsində Circle-dan draw() çağrılır

    val square: Drawable = Square() // Square obyekti Drawable kimi qəbul edilir
    render(square) // Square-dan draw() və description() çağrılır
}

Bu nümunədə, render hər hansı bir Drawable tətbiq edən obyektlə işləyir. drawable.draw() çağırışı, obyektin faktiki tipinə uyğun draw metodunun icrasını təmin edir (Square halında).

Sinif irsi və interfeys tətbiqi arasındakı fərqlər:

  • Sinif irsi: "bir şeydir" (is-a) münasibət qurur. Törəmə sinif, əsas sinfin vəziyyətini və davranışını miras alır.
  • Interfeys tətbiqi: "bacarıq" və ya "müqavilə"ni müəyyən edir. Sinif, bütün abstrakt metodların tətbiqini təmin etməyi vəd edir.

Müqayisə cədvəli:

Xüsusiyyət Sinif irsi Interfeys tətbiqi
Əlaqə növü is-a Bacarıq / Müqavilə
Çoxlu irsiyyət Yeganə Çoxlu
Vəziyyət Əsas sinfin vəziyyətini miras alır Vəziyyət miras alınmır
Metodların tətbiqi Tətbiq edə bilər Standart tətbiq edə bilər (Java 8-dən etibarən)