logo

Претоварване на метод в Java

  1. Различни начини за претоварване на метода
  2. Чрез промяна на бр. от аргументи
  3. Чрез промяна на типа данни
  4. Защо претоварването на метода не е възможно чрез промяна на типа на връщане
  5. Може ли да претоварим главния метод
  6. претоварване на метода с промоция на типа

Ако клас има множество методи с едно и също име, но различни по параметри, той е известен като Претоварване на метода .

Ако трябва да извършим само една операция, наличието на едно и също име на методите увеличава четливостта на програма .

конвертиране на char в int java

Да предположим, че трябва да извършите събиране на дадените числа, но може да има произволен брой аргументи, ако напишете метода като a(int,int) за два параметъра и b(int,int,int) за три параметъра, тогава той може да е трудно за вас, както и за други програмисти, да разберете поведението на метода, тъй като името му е различно.

Така че извършваме претоварване на метода, за да разберем програмата бързо.

претоварване на java метод

Предимство на претоварването на метода

Претоварване на метода увеличава четливостта на програмата .

Различни начини за претоварване на метода

Има два начина за претоварване на метода в java

  1. Чрез промяна на броя на аргументите
  2. Чрез промяна на типа данни

В 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[] 

Претоварване на метода и промоция на типа

Един тип се повишава в друг имплицитно, ако не бъде намерен съответстващ тип данни. Нека разберем концепцията от фигурата, дадена по-долу:

Претоварване на Java метод с промоция на типа

Както е показано на диаграмата по-горе, байтът може да бъде повишен в 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 замяна