Java'da yöntemlerin aşırı yüklenmesi çok yaygındır. Aşağıda ilginç bir Java programı bulunmaktadır.
soyut sınıfın yapıcısı olabilir miJava
public class Test { // Overloaded methods public void fun(Integer i) { System.out.println("fun(Integer ) "); } public void fun(String name) { System.out.println("fun(String ) "); } // Driver code public static void main(String [] args) { Test mv = new Test(); // This line causes error mv.fun(null); } }
Çıkış :
22: error: reference to fun is ambiguous mv.fun(null); ^ both method fun(Integer) in Test and method fun(String) in Test match 1 error
Yukarıdaki senaryoda derleme zamanı hatası almamızın nedeni burada Integer ve String yöntem argümanlarının her ikisinin de Java'daki ilkel veri türleri olmamasıdır. Bu, boş değerleri kabul ettikleri anlamına gelir. Yöntem1'e boş bir değer ilettiğimizde, her ikisi de boş değeri kabul ettiğinden derleyicinin hangi yöntemi seçmesi gerektiği konusunda kafası karışır. Bu derleme zamanı hatası, kasıtlı olarak boş değer iletmediğimiz sürece meydana gelmez. Örneğin genellikle kodlama yaparken takip ettiğimiz aşağıdaki senaryoya bakın.
Javapublic class Test { // Overloaded methods public void fun(Integer i) { System.out.println("fun(Integer ) "); } public void fun(String name) { System.out.println("fun(String ) "); } // Driver code public static void main(String [] args) { Test mv = new Test(); Integer arg = null; // No compiler error mv.fun(arg); } }
Çıkış :
fun(Integer )
Yukarıdaki senaryoda, ifadenin sonucundan dolayı 'arg' değeri null ise, bu durumda null değer yöntem1'e iletilir. Burada derleme zamanı hatası almıyoruz çünkü argümanın Tamsayı türünde olduğunu belirtiyoruz, dolayısıyla derleyici yöntem1'i (Tamsayı i) seçer ve içindeki kodu çalıştırır. Not: Geçersiz kılınan yöntem bağımsız değişkenleri ilkel veri türü olduğunda bu sorun devam etmez. Çünkü derleyici en uygun metodu seçip çalıştıracaktır.