logo

Metodöverbelastning i Java

  1. Olika sätt att överbelasta metoden
  2. Genom att ändra nr. av argument
  3. Genom att ändra datatypen
  4. Varför metodöverbelastning inte är möjlig genom att ändra returtyp
  5. Kan vi överbelasta huvudmetoden
  6. metodöverbelastning med Type Promotion

Om en klass har flera metoder med samma namn men olika i parametrar, det är känt som Metod Överbelastning .

Om vi ​​bara måste utföra en operation, med samma namn på metoderna ökar läsbarheten av program .

java annat

Anta att du måste göra addition av de givna talen men det kan finnas hur många argument som helst, om du skriver metoden som a(int,int) för två parametrar och b(int,int,int) för tre parametrar så kan vara svårt för dig och andra programmerare att förstå metodens beteende eftersom dess namn skiljer sig.

Så vi utför metodöverbelastning för att snabbt ta reda på programmet.

java metod överbelastning

Fördel med metodöverbelastning

Metodöverbelastning ökar programmets läsbarhet .

Olika sätt att överbelasta metoden

Det finns två sätt att överbelasta metoden i java

  1. Genom att ändra antalet argument
  2. Genom att ändra datatypen

I Java är metodöverbelastning inte möjlig genom att endast ändra metodens returtyp.


1) Metod Överbelastning: ändra nr. av argument

I det här exemplet har vi skapat två metoder, den första add()-metoden utför addition av två tal och den andra add-metoden utför addition av tre tal.

I det här exemplet skapar vi statiska metoder så att vi inte behöver skapa instanser för anropsmetoder.

 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)); }} 
Testa det nu

Produktion:

 22 33 


2) Metodöverbelastning: ändrar datatyp av argument

I det här exemplet har vi skapat två metoder som skiljer sig åt i Testa det nu

Produktion:

 22 24.9 

F) Varför metodöverbelastning inte är möjlig genom att endast ändra returtypen av metod?

I java är metodöverbelastning inte möjlig genom att ändra metodens returtyp endast på grund av tvetydighet. Låt oss se hur oklarheter kan uppstå:

 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 }} 
Testa det nu

Produktion:

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

System.out.println(Adder.add(11,11)); //Här, hur kan java bestämma vilken sum()-metod som ska anropas?

Obs: Compile Time Error är bättre än Run Time Error. Så java-kompilatorn gör kompilatorns tidsfel om du deklarerar samma metod med samma parametrar.

Kan vi överbelasta java main()-metoden?

Ja, genom metod överbelastning. Du kan ha valfritt antal huvudmetoder i en klass för metod överbelastning. Men JVM anropar metoden main() som endast tar emot strängarray som argument. Låt oss se det enkla exemplet:

 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');} } 
Testa det nu

Produktion:

 main with String[] 

Metodöverbelastning och typpromotion

En typ befordras implicit till en annan om ingen matchande datatyp hittas. Låt oss förstå konceptet med figuren nedan:

sortera en array java
Överbelastning av Java-metod med typpromotion

Som visas i diagrammet ovan kan byte flyttas upp till kort, int, lång, flytande eller dubbel. Den korta datatypen kan befordras till int, long, float eller double. Char datatypen kan främjas till int, long, float eller double och så vidare.

Exempel på metodöverbelastning med 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); } } 
Testa det nu
 Output:40 60 

Exempel på metodöverbelastning med typkampanj om matchning hittas

Om det finns matchande typargument i metoden, utförs inte typbefordran.

 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 } } 
Testa det nu
 Output:int arg method invoked 

Exempel på metodöverbelastning med typpromotion vid oklarhet

Om det inte finns några matchande typargument i metoden, och varje metod främjar liknande antal argument, kommer det att finnas oklarheter.

 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 } } 
Testa det nu
 Output:Compile Time Error 

En typ avpromotas inte implicit, t.ex. dubbel kan inte depromoveras till någon typ implicit.