logo

Metodeoverbelastning i Java

  1. Ulike måter å overbelaste metoden på
  2. Ved å endre nr. av argumenter
  3. Ved å endre datatypen
  4. Hvorfor metodeoverbelastning ikke er mulig ved å endre returtype
  5. Kan vi overbelaste hovedmetoden
  6. metodeoverbelastning med Type Promotion

Hvis en klasse har flere metoder med samme navn, men forskjellige i parametere, det er kjent som Metode Overbelastning .

Hvis vi bare må utføre én operasjon, øker det å ha samme navn på metodene lesbarheten til program .

tilpasset unntak i java

Anta at du må utføre addisjon av de gitte tallene, men det kan være et hvilket som helst antall argumenter, hvis du skriver metoden som a(int,int) for to parametere, og b(int,int,int) for tre parametere kan være vanskelig for deg så vel som andre programmerere å forstå metodens oppførsel fordi navnet er forskjellig.

Så vi utfører metodeoverbelastning for å finne ut programmet raskt.

overbelastning av java-metoden

Fordel med metodeoverbelastning

Metode overbelastning øker lesbarheten til programmet .

Ulike måter å overbelaste metoden på

Det er to måter å overbelaste metoden i java

  1. Ved å endre antall argumenter
  2. Ved å endre datatypen

I Java er metodeoverbelastning ikke mulig ved kun å endre returtypen til metoden.


1) Metode Overbelastning: skiftenr. av argumenter

I dette eksemplet har vi laget to metoder, den første add()-metoden utfører addisjon av to tall og den andre add-metoden utfører addisjon av tre tall.

I dette eksemplet lager vi statiske metoder slik at vi ikke trenger å lage instanser for kallemetoder.

 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)); }} 
Test det nå

Produksjon:

 22 33 


2) Metodeoverbelastning: endre datatype argumenter

I dette eksemplet har vi laget to metoder som er forskjellige i Test det nå

Produksjon:

 22 24.9 

Sp) Hvorfor metodeoverbelastning ikke er mulig ved kun å endre returtype?

I java er metodeoverbelastning ikke mulig ved å endre returtypen til metoden bare på grunn av tvetydighet. La oss se hvordan tvetydighet kan oppstå:

 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 }} 
Test det nå

Produksjon:

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

System.out.println(Adder.add(11,11)); //Her, hvordan kan java bestemme hvilken sum() metode som skal kalles?

Merk: Compile Time Error er bedre enn Run Time Error. Så java-kompilatoren gjengir kompilatortidsfeil hvis du erklærer den samme metoden med samme parametere.

Kan vi overbelaste java main()-metoden?

Ja, ved metode overbelastning. Du kan ha et hvilket som helst antall hovedmetoder i en klasse for metode overbelastning. Men JVM kaller main()-metoden som mottar string array kun som argumenter. La oss se det enkle eksemplet:

 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');} } 
Test det nå

Produksjon:

 main with String[] 

Metodeoverbelastning og typepromotering

En type forfremmes implisitt til en annen hvis ingen samsvarende datatype blir funnet. La oss forstå konseptet med figuren nedenfor:

Java-metodeoverbelastning med typepromotering

Som vist i diagrammet ovenfor, kan byte forfremmes til kort, int, lang, flytende eller dobbel. Den korte datatypen kan forfremmes til int, long, float eller double. Char datatype kan forfremmes til int, long, float eller double og så videre.

Eksempel på metodeoverbelastning 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); } } 
Test det nå
 Output:40 60 

Eksempel på metodeoverbelastning med typepromotering hvis samsvar funnet

Hvis det er matchende typeargumenter i metoden, utføres ikke typepromotering.

 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 } } 
Test det nå
 Output:int arg method invoked 

Eksempel på metodeoverbelastning med typepromotering ved uklarhet

Hvis det ikke er noen matchende type-argumenter i metoden, og hver metode fremmer tilsvarende antall argumenter, vil det være tvetydighet.

 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 } } 
Test det nå
 Output:Compile Time Error 

Én type er ikke depromoveret implisitt, for eksempel kan dobbel ikke depromoveres til noen type implisitt.

Spørsmål til intervju med java språk