Sorunun Geçmişi:
Java'nın ilk sürümlerinde, alt sınıfın ana sınıfın davranışını genişletmesine olanak veren bir kalıtım mekanizması bulunmaktaydı. Ana sınıfın üyelerine erişmek için super anahtar kelimesi kullanılır, bu da C++'tan miras alınmıştır.
Sorun:
Bazen, ana sınıfın bir yöntemine veya alanına açıkça erişim sağlama ihtiyacı doğar; eğer bu yöntemler veya alanlar geçersiz kılınmış veya gizlenmişse. super'ın doğru kullanılmaması durumunda hata veya yanlış davranışlar meydana gelebilir, örneğin, yapıcılarla çalışırken.
Çözüm:
super ile şunları yapabilirsiniz:
Örnek:
class Animal { void makeSound() { System.out.println("Hayvan sesi"); } } class Dog extends Animal { void makeSound() { super.makeSound(); // Hayvan sesi System.out.println("Hav hav"); } }
Anahtar Özellikler:
super çağrısı yapıcıda birinci satır olmayabilir mi?
Hayır. super() ile ana sınıfın yapıcısını çağırmak, yapıcının ilk satırı olmalıdır. Bu kural ihlal edilirse, derleyici hata verecektir.
super, statik yöntemlerde veya bağlamlarda kullanılabilir mi?
Hayır. super anahtar kelimesi, yalnızca nesne bağlamında kullanılabilir, çünkü nesne hiyerarşisine aittir, sınıfların değil.
super ile ana sınıfın özel bir yöntemine erişebilir miyim?
Hayır. Özel yöntemler miras alanlara görünmez — super ile bile. Sadece public, protected ve package-private yöntemler veya alanlar super ile erişilebilir.
super çağrısı (mantık tekrarları)super kullanmak — derleme hatasına yol açarsuper() çağrısının olmaması.Geliştirici, türetilmiş sınıfın yapıcısında super() çağrısını unutuyor ve ana sınıfın varsayılan bir yapıcısı yok.
Artıları:
Eksileri:
Alt sınıftaki geçersiz kılınan yöntem, önce super uygulamasını çağırır ve ardından ek mantıkla genişletir.
Artıları:
Eksileri: