Kotlin'de kalıtım ve çok biçimlilik nasıl düzenlenmiştir?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de kalıtım, sınıflar ve arayüzler mekanizmasıyla gerçekleştirilir. Sınıflar yalnızca bir başka sınıftan kalıtım yapabilir (tekli kalıtım), ancak birden çok arayüzü uygulayabilirler.
Varsayılan olarak, Kotlin'deki tüm sınıflar 'final'dır, yani kalıtılamazlar. Kalıtıma izin vermek için, sınıf açıkça open anahtar kelimesiyle işaretlenmelidir.
Sınıf Kalıtımı:
open class Shape { // Temel sınıf, open olarak işaretlenmiş
open fun draw() { // Üzerinden değiştirilebilecek metod
println("Şekil çiziliyor")
}
}
class Circle : Shape() { // Shape'ten kalıtım
override fun draw() { // Metodu geçersiz kılma
println("Daire çiziliyor")
}
}
Alt sınıfın yapıcı fonksiyonunda, temel sınıfın yapıcı fonksiyonunu açık veya örtük şekilde çağırmak gerekir.
Arayüzler:
Kotlin'deki arayüzler, Java 8'deki arayüzlere benzer ve soyut metodlar ile gövdesi olan metodlar içerebilir. Sınıflar, bir veya daha fazla arayüzü uygulayabilir.
interface Drawable {
fun draw() // Soyut metod
fun description() { // Varsayılan gövdesi olan metod
println("Bu bir çizilebilir nesnedir")
}
}
class Square : Drawable {
override fun draw() { // Soyut metodun uygulaması
println("Kare çiziliyor")
}
// description() isteğe bağlı olarak geçersiz kılınabilir
}
Polimorfizm:
Kotlin'de polimorfizm, ortak temel tür (sınıf veya arayüz) aracılığıyla farklı sınıflardan nesnelerle çalışma yeteneğiyle elde edilir. Bu, çalışma zamanında nesnenin gerçek türüne özgü metodların çağrılmasını sağlar.
fun render(drawable: Drawable) {
drawable.draw() // Nesnenin gerçek türüne göre draw() metodunu çağırır
drawable.description()
}
fun main() {
val circle: Shape = Circle() // Circle nesnesi Shape olarak kabul edilir
circle.draw() // Polimorfizm sayesinde Circle'dan draw() çağrılır
val square: Drawable = Square() // Square nesnesi Drawable olarak kabul edilir
render(square) // Square'dan draw() ve description() çağrılır
}
Bu örnekte, render herhangi bir Drawable uygulayan nesneyle çalışır. drawable.draw() çağrısı, nesnenin gerçek türü olan (Square) için draw metodunun uygulamasını çalıştırır.
Sınıf kalıtımı ile arayüz uygulaması arasındaki farklar:
- Sınıf kalıtımı: "bir şeydir" (is-a) ilişkisi kurar. Alt sınıf, temel sınıfın durumu ve davranışını miras alır.
- Arayüz uygulaması: "yetenek" veya "sözleşme" tanımlar. Sınıf, arayüzün tüm soyut metodlarının uygulamasını sağlayacağını taahhüt eder.
Karşılaştırma tablosu:
| Özellik | Sınıf Kalıtımı | Arayüz Uygulaması |
|---|---|---|
| İlişki Türü | is-a | Yetenek / Sözleşme |
| Çoklu Kalıtım | Tekil | Çoklu |
| Durum | Temel sınıfın durumunu miras alır | Durumu miras almaz |
| Metot Uygulaması | Uygulama içerebilir | Varsayılan uygulama içerebilir (Java 8'den itibaren) |