В Java е много обичайно да се претоварват методи. По-долу има интересна Java програма.
как да получите емотикони на ябълка на androidJava
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); } }
Изход:
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
Причината, поради която получаваме грешка във времето на компилиране в горния сценарий, е, че тук аргументите на метода Integer и String не са примитивни типове данни в Java. Това означава, че приемат нулеви стойности. Когато предадем нулева стойност на method1, компилаторът се обърква кой метод трябва да избере, тъй като и двата приемат null. Тази грешка по време на компилиране няма да се случи, освен ако умишлено не подадем нулева стойност. Например вижте сценария по-долу, който следваме като цяло, докато кодираме.
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); } }
Изход:
fun(Integer )
В горния сценарий, ако стойността на 'arg' е нулева поради резултата от израза, тогава нулевата стойност се предава на method1. Тук няма да получим грешка във времето на компилиране, защото указваме, че аргументът е от тип Integer, следователно компилаторът избира method1(Integer i) и ще изпълни кода вътре в него. Забележка: Този проблем няма да съществува, когато аргументите на заменения метод са примитивен тип данни. Тъй като компилаторът ще избере най-подходящия метод и ще го изпълни.