ProgramlamaBackend Geliştirici

Java'da 'super' anahtar kelimesinin nasıl çalıştığını, nerelerde doğru bir şekilde kullanılacağını ve kullanımında karşılaşılabilecek karmaşaları açıklayın.

Hintsage yapay zeka asistanı ile mülakatları geçin

Cevap.

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:

  • Ana sınıfın yapıcısını çağırmak (yapıcının ilk satırı olmalıdır)
  • Süper sınıfın alanlarına ve yöntemlerine erişmek, mevcut sınıfta geçersiz kılınmış olsa bile.

Ö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:

  • Miras alınan üyelere erişim için kullanılır
  • Süper sınıfın yapıcısını açıkça çağırır
  • Geçersiz kılma durumlarında davranışı netleştirir

Kandırıcı Sorular.

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.

Tipik Hatalar ve Anti-Desenler

  • Gereksiz super çağrısı (mantık tekrarları)
  • Özel alanlara veya yöntemlere erişim için super kullanmak — derleme hatasına yol açar
  • Temel sınıf özel bir başlatma gerektiriyorsa super() çağrısının olmaması.

Gerçek Hayat Örneği

Olumsuz Durum

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ı:

  • Yok

Eksileri:

  • Derleme hatası, nesne oluşturma imkansızlığı

Olumlu Durum

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ı:

  • Temel davranış korunur, yeni eklemek kolaydır.

Eksileri:

  • Eğer ana sınıf değişirse, beklenmedik yan etkiler alabiliriz, yöntemlerin sözleşmelerine dikkat edilmelidir.