- Różne sposoby przeciążania metody
- Zmieniając nr. argumentów
- Zmieniając typ danych
- Dlaczego przeciążenie metody nie jest możliwe poprzez zmianę typu zwracanego
- Czy możemy przeciążyć metodę main
- 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.
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
- Zmieniając liczbę argumentów
- 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:
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