У Java дуже часто перевантажують методи. Нижче представлена цікава програма Java.
пріоритетна черга javaJava
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. Це означає, що вони приймають нульові значення. Коли ми передаємо нульове значення методу1, компілятор заплутується, який метод він має вибрати, оскільки обидва приймають нуль. Ця помилка часу компіляції не станеться, якщо ми навмисно не передамо нульове значення. Наприклад, перегляньте наведений нижче сценарій, якого ми зазвичай дотримуємося під час кодування.
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' є нульовим через результат виразу, тоді нульове значення передається методу1. Тут ми не отримаємо помилку часу компіляції, оскільки ми вказуємо, що аргумент має тип Integer, отже, компілятор вибирає method1(Integer i) і виконає код у ньому. Примітка. Ця проблема не виникне, якщо перевизначені аргументи методу є примітивним типом даних. Тому що компілятор вибере найбільш підходящий метод і виконає його.