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) |