logo

Przeciążanie metod w Javie

  1. Różne sposoby przeciążania metody
  2. Zmieniając nr. argumentów
  3. Zmieniając typ danych
  4. Dlaczego przeciążenie metody nie jest możliwe poprzez zmianę typu zwracanego
  5. Czy możemy przeciążyć metodę main
  6. przeciążanie metody za pomocą promocji typu

Jeśli klasa ma wiele metod o tej samej nazwie, ale różnych parametrach, jest to tzw Przeciążenie metody .

Jeśli mamy wykonać tylko jedną operację, posiadanie takich samych nazw metod zwiększa czytelność program .

ciąg.podciąg Java

Załóżmy, że musisz dodać podane liczby, ale może być dowolna liczba argumentów, jeśli napiszesz metodę taką jak a(int,int) dla dwóch parametrów i b(int,int,int) dla trzech parametrów, to zrozumienie zachowania metody może być trudne zarówno dla Ciebie, jak i innych programistów, ponieważ jej nazwa jest inna.

Wykonujemy więc przeciążanie metod, aby szybko opracować program.

Przeciążanie metody Java

Zaleta przeciążania metod

Przeciążanie metody zwiększa czytelność programu .

Różne sposoby przeciążania metody

Istnieją dwa sposoby przeciążania metody w Javie

  1. Zmieniając liczbę argumentów
  2. Zmieniając typ danych

W Javie przeciążanie metod nie jest możliwe poprzez zmianę samego typu zwracanego metody.


1) Metoda Przeciążanie: zmiana nr. argumentów

W tym przykładzie utworzyliśmy dwie metody, pierwsza metoda add() wykonuje dodanie dwóch liczb, a druga metoda add wykonuje dodanie trzech liczb.

W tym przykładzie tworzymy metody statyczne abyśmy nie musieli tworzyć instancji do wywoływania metod.

 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)); }} 
Przetestuj teraz

Wyjście:

 22 33 


2) Przeciążanie metod: zmiana typu danych argumentów

W tym przykładzie stworzyliśmy dwie metody, które różnią się między sobą Przetestuj teraz

Wyjście:

 22 24.9 

P) Dlaczego przeciążanie metod nie jest możliwe poprzez zmianę tylko typu zwracanej metody?

W Javie przeciążanie metody nie jest możliwe poprzez zmianę typu zwracanej metody tylko z powodu niejednoznaczności. Zobaczmy, jak może wystąpić niejednoznaczność:

 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 }} 
Przetestuj teraz

Wyjście:

wyrównaj obraz za pomocą CSS
 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Dodaj.add(11,11)); //W jaki sposób Java może określić, która metoda sum() powinna zostać wywołana?

Uwaga: Błąd czasu kompilacji jest lepszy niż błąd czasu wykonania. Zatem kompilator Java renderuje błąd czasu kompilatora, jeśli zadeklarujesz tę samą metodę z tymi samymi parametrami.

Czy możemy przeciążyć metodę main() Java?

Tak, przez przeciążenie metody. W klasie może znajdować się dowolna liczba metod głównych w wyniku przeciążenia metod. Ale JVM wywołuje metodę main(), która otrzymuje tablicę ciągów znaków tylko jako argumenty. Zobaczmy prosty przykład:

 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');} } 
Przetestuj teraz

Wyjście:

 main with String[] 

Przeciążanie metod i promocja typu

Jeśli nie zostanie znaleziony pasujący typ danych, jeden typ jest niejawnie promowany do innego. Rozumiemy tę koncepcję na podstawie poniższego rysunku:

Przeciążanie metody Java z promocją typu

Jak pokazano na powyższym diagramie, bajt może zostać promowany do wartości short, int, long, float lub double. Krótki typ danych można promować do typu int, long, float lub double. Typ danych char można promować do int, long, float lub double i tak dalej.

Przykład przeciążania metod za pomocą 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); } } 
Przetestuj teraz
 Output:40 60 

Przykład przeciążania metody z promocją typu, jeśli znaleziono dopasowanie

Jeśli w metodzie znajdują się pasujące argumenty typu, promocja typu nie jest wykonywana.

 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 } } 
Przetestuj teraz
 Output:int arg method invoked 

Przykład przeciążania metod z promocją typu w przypadku niejednoznaczności

Jeśli w metodzie nie ma pasujących argumentów typu, a każda metoda promuje podobną liczbę argumentów, wystąpi niejednoznaczność.

 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 } } 
Przetestuj teraz
 Output:Compile Time Error 

Jeden typ nie jest degradowany domyślnie, na przykład double nie można niejawnie degradować do żadnego typu.