logo

Metodo perkrovimas Java

  1. Skirtingi būdai perkrauti metodą
  2. Pakeitus Nr. argumentų
  3. Keičiant duomenų tipą
  4. Kodėl metodo perkrovimas neįmanomas pakeitus grąžinimo tipą
  5. Ar galime perkrauti pagrindinį metodą
  6. metodo perkrovimas naudojant „Type Promotion“.

Jeigu klasė turi kelis metodus, turinčius tą patį pavadinimą, bet skirtingus parametrus, jis žinomas kaip Metodas Perkrovimas .

Jei turime atlikti tik vieną operaciją, naudojant tą patį metodų pavadinimą, padidėja skaitomumas programa .

dvejetainis medis java

Tarkime, kad turite atlikti pateiktų skaičių pridėjimą, tačiau argumentų gali būti bet koks skaičius, jei rašote metodą, pvz., a(int,int) dviem parametrams ir b(int,int,int) trims parametrams, tada jis Jums ir kitiems programuotojams gali būti sunku suprasti metodo veikimą, nes skiriasi jo pavadinimas.

Taigi, mes atliekame metodo perkrovimą, kad greitai išsiaiškintume programą.

Java metodo perkrova

Metodo perkrovos pranašumas

Metodo perkrova padidina programos skaitomumą .

Skirtingi būdai perkrauti metodą

Yra du būdai, kaip perkrauti metodą Java

  1. Keičiant argumentų skaičių
  2. Keičiant duomenų tipą

„Java“ metodo perkrovimas neįmanomas pakeitus tik metodo grąžinimo tipą.


1) Metodas Perkrovimas: keitimas Nr. argumentų

Šiame pavyzdyje sukūrėme du metodus: pirmasis add() metodas sudeda du skaičius, o antrasis metodas sudeda tris skaičius.

Šiame pavyzdyje mes kuriame statiniai metodai kad mums nereikėtų kurti egzemplioriaus metodams iškviesti.

 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)); }} 
Išbandykite dabar

Išvestis:

 22 33 


2) Metodo perkrovimas: argumentų duomenų tipo keitimas

Šiame pavyzdyje sukūrėme du metodus, kurie skiriasi Išbandykite dabar

Išvestis:

 22 24.9 

Kl.) Kodėl Metodo perkrovimas neįmanomas pakeitus tik metodo grąžinimo tipą?

Java, metodo perkrovimas neįmanomas pakeitus metodo grąžinimo tipą tik dėl dviprasmiškumo. Pažiūrėkime, kaip gali kilti neaiškumų:

 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 }} 
Išbandykite dabar

Išvestis:

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

System.out.println(Adder.add(11,11)); //Čia kaip java gali nustatyti, kuris sum() metodas turi būti iškviestas?

Pastaba: Kompiliavimo laiko klaida yra geriau nei Run Time Error. Taigi, „Java“ kompiliatorius pateikia kompiliatoriaus laiko klaidą, jei deklaruojate tą patį metodą, turintį tuos pačius parametrus.

Ar galime perkrauti java main() metodą?

Taip, perkrovos būdu. Klasėje galite turėti bet kokį pagrindinių metodų skaičių pagal metodų perkrovimą. Bet JVM iškviečia main() metodą, kuris eilučių masyvą gauna tik kaip argumentus. Pažiūrėkime paprastą pavyzdį:

 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');} } 
Išbandykite dabar

Išvestis:

 main with String[] 

Metodo perkrovimas ir tipo skatinimas

Vienas tipas netiesiogiai perkeliamas į kitą, jei nerandamas atitinkantis duomenų tipas. Supraskime sąvoką pagal toliau pateiktą paveikslą:

laikotarpio raktas
„Java“ metodo perkrovimas naudojant tipo reklamą

Kaip parodyta aukščiau pateiktoje diagramoje, baitas gali būti pakeistas į trumpą, vidinį, ilgą, slankiojantį arba dvigubą. Trumpas duomenų tipas gali būti pakeistas į int, long, float arba double. char duomenų tipas gali būti pakeistas į int, long, float arba double ir pan.

Metodo perkrovimo naudojant TypePromotion pavyzdys

 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); } } 
Išbandykite dabar
 Output:40 60 

Metodo perkrovimo naudojant tipo reklamą pavyzdys, jei rastas atitikimas

Jei metode yra atitinkančių tipo argumentų, tipo paaukštinimas nevykdomas.

 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 } } 
Išbandykite dabar
 Output:int arg method invoked 

Metodo perkrovimo naudojant tipo reklamą pavyzdys dviprasmybių atveju

Jei metode nėra atitinkamo tipo argumentų, o kiekvienas metodas skatina panašų skaičių argumentų, bus neaiškumų.

 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 } } 
Išbandykite dabar
 Output:Compile Time Error 

Vieno tipo reklama nėra netiesiogiai panaikinta, pavyzdžiui, dvigubas negali būti netiesiogiai pažemintas į bet kurį tipą.