- Різні способи перевантаження методу
- Змінивши номер аргументів
- Змінюючи тип даних
- Чому перевантаження методу неможливе шляхом зміни типу повернення
- Чи можемо ми перевантажити основний метод
- перевантаження методу за допомогою Type Promotion
Якщо клас має кілька методів з однаковою назвою, але різними параметрами, він відомий як Перевантаження методу .
Якщо нам потрібно виконати лише одну операцію, наявність однакових імен методів підвищує читабельність програма .
розбиття рядка c++
Припустімо, що вам потрібно виконати додавання заданих чисел, але може бути будь-яка кількість аргументів, якщо ви напишете такий метод, як a(int,int) для двох параметрів і b(int,int,int) для трьох параметрів, тоді він Вам, а також іншим програмістам може бути важко зрозуміти поведінку методу, оскільки його назва відрізняється.
Отже, ми виконуємо перевантаження методів, щоб швидко зрозуміти програму.
Перевага методу перевантаження
Перевантаження методу підвищує читабельність програми .
Різні способи перевантаження методу
Існує два способи перевантажити метод у java
- Змінюючи кількість аргументів
- Змінюючи тип даних
У Java перевантаження методів неможливе шляхом зміни лише типу повернення методу.
1) Перевантаження методу: немає змін. аргументів
У цьому прикладі ми створили два методи: перший метод add() виконує додавання двох чисел, а другий метод add виконує додавання трьох чисел.
У цьому прикладі ми створюємо статичні методи щоб нам не потрібно було створювати екземпляр для виклику методів.
class Adder{ static int add(int a,int b){return a+b;} static int add(int a,int b,int c){return a+b+c;} } class TestOverloading1{ public static void main(String[] args){ System.out.println(Adder.add(11,11)); System.out.println(Adder.add(11,11,11)); }}Перевірте зараз
Вихід:
22 33
2) Перевантаження методу: зміна типу даних аргументів
У цьому прикладі ми створили два методи, які відрізняються Перевірте зараз
Вихід:
22 24.9
Q) Чому перевантаження методу неможливе шляхом зміни лише типу повернення методу?
У java перевантаження методу неможливе шляхом зміни типу повернення методу лише через неоднозначність. Давайте подивимося, як може виникнути неоднозначність:
class Adder{ static int add(int a,int b){return a+b;} static double add(int a,int b){return a+b;} } class TestOverloading3{ public static void main(String[] args){ System.out.println(Adder.add(11,11));//ambiguity }}Перевірте зараз
Вихід:
Compile Time Error: method add(int,int) is already defined in class Adder
System.out.println(Adder.add(11,11)); //Як java може визначити, який метод sum() слід викликати?
Примітка. Помилка часу компіляції краще, ніж помилка виконання. Таким чином, компілятор java відображає помилку часу компіляції, якщо ви оголошуєте той самий метод із однаковими параметрами.
Чи можемо ми перевантажити метод Java main()?
Так, через перевантаження методу. Ви можете мати будь-яку кількість основних методів у класі через перевантаження методів. Але JVM викликає метод main(), який отримує лише масив рядків як аргументи. Давайте розглянемо простий приклад:
class TestOverloading4{ public static void main(String[] args){System.out.println('main with String[]');} public static void main(String args){System.out.println('main with String');} public static void main(){System.out.println('main without args');} }Перевірте зараз
Вихід:
main with String[]
Перевантаження методів і просування типу
Один тип неявно змінюється на інший, якщо відповідного типу даних не знайдено. Давайте розберемо концепцію на малюнку нижче:
Як показано на наведеній вище діаграмі, байт можна змінити на short, int, long, float або double. Короткий тип даних можна змінити на int, long, float або double. Тип даних char може бути підвищений до int, long, float або double тощо.
Приклад перевантаження методу за допомогою TypePromotion
class OverloadingCalculation1{ void sum(int a,long b){System.out.println(a+b);} void sum(int a,int b,int c){System.out.println(a+b+c);} public static void main(String args[]){ OverloadingCalculation1 obj=new OverloadingCalculation1(); obj.sum(20,20);//now second int literal will be promoted to long obj.sum(20,20,20); } }Перевірте зараз
Output:40 60
Приклад перевантаження методу з підвищенням типу, якщо відповідність знайдено
Якщо в методі є відповідні аргументи типу, підвищення типу не виконується.
class OverloadingCalculation2{ void sum(int a,int b){System.out.println('int arg method invoked');} void sum(long a,long b){System.out.println('long arg method invoked');} public static void main(String args[]){ OverloadingCalculation2 obj=new OverloadingCalculation2(); obj.sum(20,20);//now int arg sum() method gets invoked } }Перевірте зараз
Output:int arg method invoked
Приклад перевантаження методу з підвищенням типу у разі неоднозначності
Якщо в методі немає аргументів відповідного типу, і кожен метод надає однакову кількість аргументів, буде неоднозначність.
class OverloadingCalculation3{ void sum(int a,long b){System.out.println('a method invoked');} void sum(long a,int b){System.out.println('b method invoked');} public static void main(String args[]){ OverloadingCalculation3 obj=new OverloadingCalculation3(); obj.sum(20,20);//now ambiguity } }Перевірте зараз
Output:Compile Time Error
Один тип не відмінюється неявно, наприклад, double не може бути неявно відмінено до будь-якого типу.
підкачка пам'яті