- Skirtingi būdai perkrauti metodą
- Pakeitus Nr. argumentų
- Keičiant duomenų tipą
- Kodėl metodo perkrovimas neįmanomas pakeitus grąžinimo tipą
- Ar galime perkrauti pagrindinį metodą
- 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ą.
Metodo perkrovos pranašumas
Metodo perkrova padidina programos skaitomumą .
Skirtingi būdai perkrauti metodą
Yra du būdai, kaip perkrauti metodą Java
- Keičiant argumentų skaičių
- 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
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