- Различни начини за претоварване на метода
- Чрез промяна на бр. от аргументи
- Чрез промяна на типа данни
- Защо претоварването на метода не е възможно чрез промяна на типа на връщане
- Може ли да претоварим главния метод
- претоварване на метода с промоция на типа
Ако клас има множество методи с едно и също име, но различни по параметри, той е известен като Претоварване на метода .
Ако трябва да извършим само една операция, наличието на едно и също име на методите увеличава четливостта на програма .
конвертиране на char в int java
Да предположим, че трябва да извършите събиране на дадените числа, но може да има произволен брой аргументи, ако напишете метода като 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
В) Защо претоварването на метода не е възможно само чрез промяна на връщащия тип на метода?
В 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
Един тип не се деповишава имплицитно, например двойното не може да бъде деповишено до който и да е тип имплицитно.
js замяна