ProgramlamaJava geliştirici

Java'da yöntem yeniden tanımlama (method overriding) mekanizması nasıl çalışır, doğru bir şekilde nasıl kullanılmalıdır ve hangi incelikler dikkate alınmalıdır?

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

Cevap.

Yöntem yeniden tanımlama (overriding), bir alt sınıfın, süper sınıfında zaten tanımlanmış bir yöntemin kendi uygulamasını sağlamasıdır. Alt sınıftaki yöntem aynı isme, parametrelere ve geri dönüş değerinin türüne (veya onun alt türüne) sahip olmalıdır.

Ana kurallar:

  • Yöntemler public veya protected olmalıdır (daha sıkı bir erişim seviyesi olmamalıdır).
  • private ve static yöntemler yeniden tanımlanamaz.
  • @Override anotasyonunun kullanımı hataları derleme aşamasında bulmaya yardımcı olur.
  • Java'da covariant return type (yeniden tanımlanan yöntem, orijinal geri dönüş türünün alt türünü dönebilir) desteklenmektedir.
  • İstisnalar: Alt sınıftaki yöntem yeni checked-istisnalar tanımlayamaz, bu istisnalar süper sınıf yönteminin imzasında yoksa.

Örnek:

class Animal { public void sound() { System.out.println("Bazı sesler"); } } class Dog extends Animal { @Override public void sound() { System.out.println("Hav hav"); } }

Aldatıcı soru.

Soru: "Java'da static yöntemi yeniden tanımlamak mümkün mü?"

Cevap: Hayır, static yöntemler yeniden tanımlanamaz. Onlar gizlenir (method hiding). Eğer alt sınıfta aynı imzaya sahip bir static yöntem tanımlanırsa, bu gizlenme olur, yeniden tanımlama değil.

Örnek:

class A { static void print() { System.out.println("A"); } } class B extends A { static void print() { System.out.println("B"); } } A obj = new B(); obj.print(); // "A" yazdırır

Konu hakkında bilgi eksikliğinden kaynaklanan gerçek hata örnekleri.


Hikaye

Projede bir geliştirici, miras alınan sınıfta bir static yöntemi "yeniden tanımlamaya" çalıştı ve süper sınıf referansıyla alt sınıfın sürümünü çağırmayı bekliyordu. Bu beklenmeyen sonuçlara yol açtı: süper sınıfın yöntemi çağrıldı, bu da programın doğru çalışmamasına neden oldu.


Hikaye

@Override anotasyonunu kullanmak önemlidir. Bir projede, bir geliştirici, yeniden tanımlama sırasında yöntemin adında hata yaptı ve anotasyon olmadan derleyici hata vermedi. Sonuç olarak, miras alma şemasında varsayılan olarak süper sınıfın yöntemi çağrıldı, bu da iş süreçlerinde yanlış bir mantığa yol açtı.


Hikaye

Checked-istisnaların üzerine yazma: Bir geliştirici, alt sınıfta yeniden tanımlanan yöntemde yeni bir checked-istisna fırlatma ekledi, bu istisna orijinal imzada yoktu. Kod hata ile derlendi ve bunu değiştirmek zorunda kaldı çünkü bu, istisna yeniden tanımlama kuralını ihlal ediyordu.