I Java är det mycket vanligt att överbelasta metoder. Nedan finns ett intressant Java-program.
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); } }
Utgång:
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
Anledningen till att vi får kompileringstidsfel i scenariot ovan är här metodargumenten Integer och String är båda inte primitiva datatyper i Java. Det betyder att de accepterar nollvärden. När vi skickar ett nollvärde till metod1 blir kompilatorn förvirrad vilken metod den måste välja eftersom båda accepterar nollvärdet. Detta kompileringstidsfel skulle inte hända om vi inte avsiktligt skickar ett nollvärde. Se till exempel scenariot nedan som vi följer generellt vid kodning.
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); } }
Utgång:
fun(Integer )
Om 'arg'-värdet i ovanstående scenario är null på grund av resultatet av uttrycket skickas nullvärdet till metod1. Här skulle vi inte få kompileringstidsfel eftersom vi anger att argumentet är av typen Integer, därför väljer kompilatorn metod1(Integer i) och kommer att exekvera koden i det. Obs: Det här problemet skulle inte kvarstå när de åsidosatta metodargumenten är primitiva datatyper. Eftersom kompilatorn väljer den mest lämpliga metoden och kör den.