V Javi je zelo pogosto preobremenitev metod. Spodaj je zanimiv program Java.
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); } }
Izhod:
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
Razlog, zakaj v zgornjem scenariju dobimo napako časa prevajanja, je, da argumenti metode Celo število in Niz niso primitivni tipi podatkov v Javi. To pomeni, da sprejemajo ničelne vrednosti. Ko metodi1 posredujemo ničelno vrednost, se prevajalnik zmede, katero metodo mora izbrati, saj oba sprejemata ničelno vrednost. Ta napaka v času prevajanja se ne bi zgodila, razen če namenoma posredujemo ničelno vrednost. Oglejte si na primer spodnji scenarij, ki mu na splošno sledimo med kodiranjem.
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); } }
Izhod:
fun(Integer )
Če je v zgornjem scenariju vrednost 'arg' ničelna zaradi rezultata izraza, se ničelna vrednost posreduje metodi1. Tukaj ne bi dobili napake v času prevajanja, ker podajamo, da je argument tipa Integer, zato prevajalnik izbere metodo1(Integer i) in bo izvedel kodo znotraj nje. Opomba: Ta težava ne bi obstajala, če so argumenti preglasene metode primitivni podatkovni tip. Ker bo prevajalnik izbral najprimernejšo metodo in jo izvedel.