Kotlin'de varsayılan olarak tüm sınıflar, yöntemler ve özellikler sonludur (final). Yani, açık bir şekilde open anahtar kelimesi belirtilmediği sürece kalıtılamaz veya geçersiz kılınamaz.
open anahtar kelimesi, sınıfın kalıtımına veya yöntemin geçersiz kılınmasına izin verir. Bu, Java'dan temel bir farklılıktır; çünkü Java'da sınıflar varsayılan olarak kalıma açıktır.
Örnek:
open class Animal { open fun sayHello() { println("Hello from Animal!") } } class Dog : Animal() { override fun sayHello() { println("Woof!") } }
Animal sınıfından open kaldırılırsa — kalıtım denemesi derleme hatası ile sonuçlanır.override zorunludur.interface anahtar kelimesi ile uygulanır ve open gerektirmez.Kotlin'de Java'daki gibi herhangi bir sınıf kalıtılabilir mi?
Cevap: Hayır, sadece open (veya abstract) olarak işaretlenmiş sınıflar kalıtılabilir. Normal sınıflar sonlandırılmıştır ve kalıtım yapılamaz. Bu, kodun güvenliğini ve öngörülebilirliğini artırmak için yapılmıştır.
Yanlış kod örneği:
class Animal class Dog : Animal() // Derleme hatası: "Animal" sonlandırılmış
Hikaye
Android platformu için bir proje kapsamında bir genç geliştirici, open eklemeyi unutarak kullanıcı bileşenini özel bir View sınıfından miras almaya çalıştı. Yapı hata verdi, neden görünür değildi ve süreler kaydırıldı. Sorun, derleyici mesajı dikkatlice okununca ortaya çıktı.
Hikaye
SDK geliştirme sırasında, spesifikasyon genişletilebilir bir temel sınıf gerektiriyordu ancak bu open olmadan tanımlandı. Müşterilere teslimatta, kütüphanenin kaynak kodları değiştirilmeden genişletilemeyeceği anlaşıldı. Güncelleme yayınlamak zorunda kalındı.
Hikaye
Bir projede eski Java kodu Kotlin'e taşınırken, sınıfların varsayılan olarak kapalı olduğu unutuldu. Mock'ları kullanan çoğu birim testi derlenmeyi durdurdu ve bu da sürüm sürecini yavaşlattı. Sadece open eklenmesiyle sorun çözüldü.