- Olika sätt att överbelasta metoden
- Genom att ändra nr. av argument
- Genom att ändra datatypen
- Varför metodöverbelastning inte är möjlig genom att ändra returtyp
- Kan vi överbelasta huvudmetoden
- 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.
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
- Genom att ändra antalet argument
- 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
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