Kotlin'deki override anahtar kelimesi, süper sınıf ya da arayüzdeki yöntemlerin ve özelliklerin aşırı yüklenmesini açıkça belirtmek için gereklidir.
Java'da süper sınıf yöntemlerini override anahtar kelimesi olmadan aşırı yükleyebilirsiniz, bu da bazen hataların veya yazım hatalarının ortaya çıkmasına neden olabilir. Kotlin, güvenlik ilkesine dayanarak, her aşırı yüklemede override belirtmenin ve süper sınıf üyesi için open kullanmanın zorunlu olmasını gerektirir.
Temel sınıf yöntemlerinin (accidental overriding) yanlışlıkla gizlenmesi riski ve miras alınan üyelerin açık bir şekilde yönetim zorunluluğu. Ayrıca, aşırı yüklenen yöntemlerin open olarak işaretlenmesi gerekir, aksi takdirde derleme hatası olmadan aşırı yüklenemezler.
Süper sınıf veya arayüzdeki yöntemler ve özelliklerle birlikte override anahtar kelimesinin kullanımını önceden open, abstract veya mevcut override olarak işaretlenmiş olmalıdır.
Kod örneği:
open class Animal { open fun sound() = "???" } class Dog : Animal() { override fun sound() = "Woof!" }
Anahtar özellikler:
override anahtar kelimesi olmadan metodu aşırı yüklemek mümkün değildir — derleme hatası olacaktır;final uygulanır, yalnızca açıkça open olarak işaretlenenler aşırı yüklenebilir;override anahtar kelimesi, arayüzler ve sınıflar aracılığıyla çoklu kalıtımı destekler.open/abstract/override olarak işaretlenmemiş bir özellik veya yöntemi aşırı yüklemek mümkün müdür?
Hayır, yalnızca açıkça open/abstract/override olarak işaretlenen üyeler alt sınıfta aşırı yüklenebilir.
Bir arayüz yöntemini uygularken override zorunlu mudur?
Evet, her zaman, bu ilk seviye bir uygulama olsa bile, override zorunludur — bu, Kotlin'in tutarlılığı için bir sözdizimidir.
override ile işaretlenmiş bir yöntem daha sonra aşırı yüklenebilir mi?
Evet, eğer yöntem final olarak işaretlenmediyse (varsayılan olarak override open olarak miras alır), o zaman onu da hiyerarşide aşırı yükleyebilirsiniz.
open olarak işaretlenmemesi — aşırı yüklemek mümkün değildir, derleyici hata verir;final yöntemi aşırı yüklemeye çalışmak — imkansız, derleme hatası.Geliştirici, temel sınıfta open belirtmeyi unutur:
class Cat { fun meow() = "meow" } class Tiger: Cat() { override fun meow() = "ROAR" // derleme hatası }
Artılar:
Eksiler:
override hatası ortaya çıkar.Sınıfın ve miras alma niyetinin doğru tanımlanması:
open class Cat { open fun meow() = "meow" } class Tiger: Cat() { override fun meow() = "ROAR" }
Artılar:
Eksiler: