Her ikisi de adını yeniden kullanır, ancak temelde farklıdırlar. = aynı ad, , aynı sınıfta, çözülür. = bir alt sınıf ile , çözülür.
Her ikisi de adını yeniden kullanır, ancak temelde farklıdırlar. = aynı ad, , aynı sınıfta, çözülür. = bir alt sınıf ile , çözülür.
| Aşırı Yükleme | Geçersiz Kılma | |
|---|---|---|
| İmza | Farklı olmalı (parametreler) | Aynı olmalı |
| İlişki | Aynı sınıf | Üst sınıf ↔ alt sınıf |
| Çözülme | Derleme zamanı (statik) | Çalışma zamanı (dinamik) |
| Amaç | Kolaylık / varyantlar | Polimorfizm |
class Printer {
void print(String s) { System.out.println(s); }
void print(int n) { System.out.println(n); } // same name, diff param
void print(String s, int times) { /* ... */ }
}
Derleyici, argüman türlerine göre hangi print'i seçer — hiç kalıtım yoktur.
class Animal { String speak() { return "..."; } }
class Dog extends Animal {
@Override
String speak() { return "Woof"; } // replaces Animal.speak()
}
Animal a = new Dog();
a.speak(); // "Woof" — runtime picks Dog's version (dynamic dispatch)
Sık yapılan bir hata geçersiz kılmak istediğiniz halde yanlışlıkla aşırı yükleme yapmaktır (örneğin imzada yazım hatası). Derleyici bunu yakalaması için her zaman @Override (Java) veya override (C#) kullanın.
Geçersiz kılma, polimorfizmimizin motoru — davranışı değiştirdiğinizi düşünsenkini "bir arayüz, birçok uygulama" işlevini sağlayan çalışma zamanı mekanizmi.
Farkı bilmek klasik hatayı önler: davranışı değiştirdiğinizi düşünürken aslında hiç çağrılmayan ikinci bir metot oluşturduğunuz durumdan.
Junior'dan Senior'a detaylı cevaplarla bir BT mülakat soruları kütüphanesi.
Bağış Yap