Kotlin'de kalıtım ve delegasyon ile ilgili hangi özellikler vardır?
sobes.tech yapay zeka
AI'dan gelen yanıt
Kotlin'de kalıtım varsayılan olarak kapalıdır (final), ve sınıflar ile metodların kalıtıma ve üzerine yazmaya izin vermesi için açıkça open olarak işaretlenmesi gerekir. Sadece bir sınıftan kalıtım desteklenir, ancak birden fazla arayüz uygulanabilir.
Kalıtım sırasında, temel sınıfın yapıcı metodu, türetilmiş sınıfın yapıcı metodundan sonra çağrılır:
open class Base(val name: String) {
init { println("Base başlatılıyor") }
open fun greeting() { println("Base'den Merhaba") }
}
class Derived(name: String, val age: Int) : Base(name) {
init { println("Derived başlatılıyor") }
override fun greeting() { println("Derived'den Merhaba") }
}
Kotlin'de delegasyon, dil seviyesinde by anahtar kelimesi kullanılarak uygulanır. Bir arayüzün uygulamasını başka bir nesneye devretmeye olanak tanır. Bu, doğrudan kalıtıma göre kullanışlı bir alternatiftir.
interface Greeter {
fun greet(name: String)
}
class GreeterImpl : Greeter {
override fun greet(name: String) {
println("Merhaba, $name!")
}
}
class DelegateGreeter(greeter: Greeter) : Greeter by greeter
Burada, DelegateGreeter, greet metodunun çağrısını greeter nesnesine devreder.
Karşılaştırma:
| Özellik | Kalıtım | Delegasyon (by) |
|---|---|---|
| İlişki | "bir şeydir" (is a) | "sahiptir" (has a) |
| Uygulama | Sınıfın doğrudan genişlemesi | Uygulamanın başka bir nesneye devri |
| Çoklu kalıtım | Tek temel sınıf | Birden çok arayüz |
| Esneklik | Daha az esnek | Daha esnek, bileşim yoluyla |
| Görünürlük | protected ve public kalıtılır | Arayüzler aracılığıyla çalışır |
Delegasyon, esneklik sağlamak ve "kırılgan temel sınıf" sorunlarından kaçınmak için genellikle kalıtımdan daha tercih edilir.