- Različni načini preobremenitve metode
- S spremembo št. argumentov
- S spremembo podatkovnega tipa
- Zakaj preobremenitev metode ni mogoča s spremembo vrste povratka
- Ali lahko preobremenimo glavno metodo
- preobremenitev metode s promocijo vrste
Če razred ima več metod z enakim imenom, vendar z različnimi parametri, znana je kot Preobremenitev metode .
Če moramo izvesti samo eno operacijo, enako ime metod poveča berljivost program .
predmet json v Javi
Recimo, da morate izvesti seštevanje danih števil, vendar je lahko poljubno število argumentov, če napišete metodo, kot je a(int,int) za dva parametra in b(int,int,int) za tri parametre, potem morda boste vi in drugi programerji težko razumeli vedenje metode, ker se njeno ime razlikuje.
Zato izvajamo preobremenitev metod, da hitro ugotovimo program.
Prednost preobremenitve metode
Preobremenitev metode poveča berljivost programa .
Različni načini preobremenitve metode
Obstajata dva načina za preobremenitev metode v Javi
- S spreminjanjem števila argumentov
- S spremembo vrste podatkov
V Javi preobremenitev metode ni mogoča samo s spreminjanjem vrste povratka metode.
1) Preobremenitev metode: spreminjanje št. argumentov
V tem primeru smo ustvarili dve metodi, prva metoda add() izvede seštevanje dveh števil, druga metoda add pa izvede seštevanje treh števil.
V tem primeru ustvarjamo statične metode tako da nam ni treba ustvariti primerka za klicne metode.
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)); }}Preizkusite zdaj
Izhod:
22 33
2) Preobremenitev metode: spreminjanje vrste podatkov argumentov
V tem primeru smo ustvarili dve metodi, ki se razlikujeta Preizkusite zdaj
Izhod:
22 24.9
V) Zakaj preobremenitev metode ni mogoča samo s spremembo vrnjene vrste metode?
V Javi preobremenitev metode ni mogoča s spreminjanjem vrnjenega tipa metode samo zaradi dvoumnosti. Poglejmo, kako lahko pride do dvoumnosti:
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 }}Preizkusite zdaj
Izhod:
Compile Time Error: method add(int,int) is already defined in class Adder
System.out.println(Adder.add(11,11)); //Kako lahko java določi, katero metodo sum() je treba poklicati?
Opomba: Napaka med prevajanjem je boljša od napake med izvajanjem. Torej prevajalnik java upodablja časovno napako prevajalnika, če deklarirate isto metodo z enakimi parametri.
Ali lahko preobremenimo metodo java main()?
Da, s preobremenitvijo metode. V razredu imate lahko poljubno število glavnih metod s preobremenitvijo metod. Ampak JVM pokliče metodo main(), ki prejme niz nizov samo kot argumente. Poglejmo preprost primer:
c# datum in čas
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');} }Preizkusite zdaj
Izhod:
main with String[]
Preobremenitev metode in promocija tipa
En tip se implicitno poviša v drugega, če ni najden noben ustrezni podatkovni tip. Razumejmo koncept s spodnjo sliko:
Kot je prikazano v zgornjem diagramu, lahko bajt povišate v short, int, long, float ali double. Podatkovni tip short se lahko poviša v int, long, float ali double. Podatkovni tip char se lahko poviša v int, long, float ali double in tako naprej.
Primer preobremenitve metode s 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); } }Preizkusite zdaj
Output:40 60
Primer preobremenitve metode s promocijo vrste, če je ujemanje ugotovljeno
Če so v metodi ujemajoči se argumenti tipa, se napredovanje tipa ne izvede.
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 } }Preizkusite zdaj
Output:int arg method invoked
Primer preobremenitve metode s promocijo tipa v primeru dvoumnosti
Če v metodi ni argumentov ujemajočega se tipa in vsaka metoda spodbuja podobno število argumentov, bo prišlo do dvoumnosti.
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 } }Preizkusite zdaj
Output:Compile Time Error