У Јави је врло уобичајено да се методе преоптерећују. Испод је занимљив Јава програм.
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(); // This line causes error mv.fun(null); } }
Излаз :
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
Разлог зашто добијамо грешку у времену компајлирања у горњем сценарију је овде аргументи метода Интегер и Стринг, оба нису примитивни типови података у Јави. То значи да прихватају нулте вредности. Када проследимо нулту вредност методи1, компајлер се збуни који метод мора да изабере пошто оба прихватају нулту вредност. Ова грешка у времену компајлирања се не би догодила осим ако намерно не проследимо нулту вредност. На пример, погледајте следећи сценарио који генерално пратимо током кодирања.
Java
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(); Integer arg = null; // No compiler error mv.fun(arg); } }
Излаз :
fun(Integer )
У горњем сценарију, ако је вредност 'арг' нулл због резултата израза, онда се нулл вредност прослеђује методи1. Овде не бисмо добили грешку у времену компајлирања јер наводимо да је аргумент типа Интегер, па компајлер бира метод1(Интегер и) и извршиће код унутар њега. Напомена: Овај проблем не би постојао када су аргументи надјачане методе примитивни тип података. Зато што ће компајлер изабрати најпогоднији метод и извршити га.