În Java este foarte comun să supraîncărcați metodele. Mai jos este un program Java interesant.
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); } }
Ieșire:
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
Motivul pentru care obținem o eroare de timp de compilare în scenariul de mai sus este aici argumentele metodei Integer și String ambele nu sunt tipuri de date primitive în Java. Asta înseamnă că acceptă valori nule. Când trecem o valoare nulă metodei 1, compilatorul devine confuz care este metoda pe care trebuie să o selecteze, deoarece ambele acceptă valoarea nulă. Această eroare de timp de compilare nu s-ar întâmpla decât dacă transmitem în mod intenționat o valoare nulă. De exemplu, vedeți scenariul de mai jos pe care îl urmărim în general în timpul codificării.
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); } }
Ieșire:
fun(Integer )
În scenariul de mai sus, dacă valoarea „arg” este nulă din cauza rezultatului expresiei, atunci valoarea nulă este transmisă metodei 1. Aici nu vom primi o eroare de timp de compilare, deoarece specificăm că argumentul este de tip Integer, prin urmare compilatorul selectează metoda 1 (Integer i) și va executa codul din interiorul acesteia. Notă: Această problemă nu va persista atunci când argumentele metodei suprascrise sunt de tipul de date primitiv. Pentru că compilatorul va selecta metoda cea mai potrivită și o va executa.