logo

Supraîncărcarea metodei în Java

  1. Diferite moduri de a supraîncărca metoda
  2. Prin schimbarea nr. a argumentelor
  3. Prin schimbarea tipului de date
  4. De ce supraîncărcarea metodei nu este posibilă prin schimbarea tipului de returnare
  5. Putem supraîncărca metoda principală
  6. supraîncărcarea metodei cu tipul de promovare

În cazul în care o clasă are mai multe metode având același nume, dar diferiți ca parametri, este cunoscut ca Supraîncărcarea metodei .

Dacă trebuie să efectuăm o singură operație, a avea același nume al metodelor crește lizibilitatea program .

char și int java

Să presupunem că trebuie să efectuați adăugarea numerelor date, dar poate exista orice număr de argumente, dacă scrieți metoda cum ar fi a(int,int) pentru doi parametri și b(int,int,int) pentru trei parametri, atunci poate fi dificil pentru dvs., precum și pentru alți programatori, să înțelegeți comportamentul metodei, deoarece numele acesteia diferă.

Deci, efectuăm supraîncărcarea metodei pentru a înțelege rapid programul.

supraîncărcarea metodei java

Avantajul supraîncărcării metodei

Supraîncărcarea metodei crește lizibilitatea programului .

Diferite moduri de a supraîncărca metoda

Există două moduri de a supraîncărca metoda în java

  1. Prin schimbarea numărului de argumente
  2. Prin schimbarea tipului de date

În Java, supraîncărcarea metodei nu este posibilă doar prin schimbarea tipului de returnare al metodei.


1) Supraîncărcare metodă: schimbarea nr. a argumentelor

În acest exemplu, am creat două metode, prima metoda add() efectuează adăugarea a două numere și a doua metoda add efectuează adăugarea a trei numere.

În acest exemplu, creăm metode statice astfel încât să nu fie nevoie să creăm instanță pentru apelarea metodelor.

 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)); }} 
Testează-l acum

Ieșire:

 22 33 


2) Supraîncărcarea metodei: schimbarea tipului de date al argumentelor

În acest exemplu, am creat două metode care diferă în Testează-l acum

Ieșire:

 22 24.9 

Î) De ce nu este posibilă supraîncărcarea metodei prin schimbarea numai a tipului de returnare a metodei?

În java, supraîncărcarea metodei nu este posibilă prin schimbarea tipului de returnare al metodei doar din cauza ambiguității. Să vedem cum poate apărea ambiguitatea:

 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 }} 
Testează-l acum

Ieșire:

 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //Aici, cum poate java să determine ce metodă sum() ar trebui apelată?

Notă: Eroare de timp de compilare este mai bună decât Eroare de timp de execuție. Deci, compilatorul java redă o eroare de timp a compilatorului dacă declarați aceeași metodă având aceiași parametri.

Putem supraîncărca metoda java main()?

Da, prin supraîncărcare de metodă. Puteți avea orice număr de metode principale într-o clasă prin supraîncărcare a metodei. Dar JVM apelează metoda main() care primește matrice de șiruri doar ca argumente. Să vedem exemplul simplu:

 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');} } 
Testează-l acum

Ieșire:

 main with String[] 

Supraîncărcarea metodei și promovarea tipului

Un tip este promovat la altul implicit dacă nu se găsește niciun tip de date potrivit. Să înțelegem conceptul prin figura de mai jos:

Supraîncărcarea metodei Java cu promovarea tipului

După cum este afișat în diagrama de mai sus, byte poate fi promovat la short, int, long, float sau double. Tipul de date scurt poate fi promovat la int, long, float sau double. Tipul de date char poate fi promovat la int, long, float sau double și așa mai departe.

Actrița Rakul Preet Singh

Exemplu de supraîncărcare a metodei cu 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); } } 
Testează-l acum
 Output:40 60 

Exemplu de supraîncărcare a metodei cu tipul de promovare dacă se găsește potrivire

Dacă există argumente de tip potrivite în metodă, promovarea tipului nu este efectuată.

 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 } } 
Testează-l acum
 Output:int arg method invoked 

Exemplu de supraîncărcare a metodei cu promovarea tipului în caz de ambiguitate

Dacă nu există argumente de tip potrivit în metodă și fiecare metodă promovează un număr similar de argumente, va exista ambiguitate.

 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 } } 
Testează-l acum
 Output:Compile Time Error 

Un tip nu este de-promovat implicit, de exemplu, dublu nu poate fi depromovat la niciun tip implicit.