Nesne Yönelimli Programlamada Metot Ezme: Overriding Detaylı İnceleme
Bu yazıda Java overriding konusunu detaylı şekilde ele alacağız. Metot geçersiz kılma (override) nedir, nasıl çalışır, kuralları nelerdir ve Java overriding örnekleri ile nasıl uygulanır inceleyeceğiz.
Overriding Nedir?
Overriding, bir üst sınıfta (superclass) tanımlanan metodun, alt sınıfta (subclass) aynı imza ile yeniden tanımlanmasıdır.
Bu sayede alt sınıf, üst sınıftan gelen davranışı özelleştirebilir. Bu durum polimorfizm (çok biçimlilik) kavramının temelidir.
Java Overriding Örneği
public class Hayvan {
public void sesCikar() {
System.out.println("Hayvan sesi çıkarıyor.");
}
}
class Kedi extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Miyav!");
}
}
class Kopek extends Hayvan {
@Override
public void sesCikar() {
System.out.println("Hav!");
}
}
Bu örnekte her sınıf kendi davranışını tanımlar. Aynı metot çağrısı farklı sonuçlar üretir.
Polimorfizm ile Overriding
Hayvan hayvan1 = new Kedi();
Hayvan hayvan2 = new Kopek();
hayvan1.sesCikar(); // Miyav
hayvan2.sesCikar(); // Hav
Burada hangi metodun çalışacağı runtime sırasında belirlenir.
Overriding Kuralları
- Metot adı ve parametreler aynı olmalıdır
- Dönüş tipi aynı veya alt tür olmalıdır
- Access modifier daha dar olamaz
- final metot override edilemez
- static metot override edilemez
- private metot miras alınmaz (override edilemez)
super Anahtar Kelimesi Kullanımı
Alt sınıfta, üst sınıf metoduna erişmek için super kullanılır.
class Hayvan {
public void yemek() {
System.out.println("Hayvan yemek yer.");
}
}
class At extends Hayvan {
@Override
public void yemek() {
super.yemek();
System.out.println("At ot yer.");
}
}
Hatalı Overriding Örnekleri
class Ust {
protected void yemek() { }
}
class Alt extends Ust {
// private void yemek() { } // HATA (daha dar erişim)
}
class A {
public String bilgi() { return "A"; }
}
class B extends A {
// public int bilgi() { return 1; } // HATA (dönüş tipi uyumsuz)
}
Overriding vs Overloading
- Overriding → Runtime çalışır
- Overloading → Compile-time çalışır
- Overriding → Aynı imza
- Overloading → Farklı parametre
Sonuç
Java overriding, nesne yönelimli programlamada esneklik sağlayan güçlü bir mekanizmadır. Polimorfizm ile birlikte kullanıldığında, daha temiz ve sürdürülebilir kod yazmanı sağlar.