logo

Preobremenitev metode v Javi

  1. Različni načini preobremenitve metode
  2. S spremembo št. argumentov
  3. S spremembo podatkovnega tipa
  4. Zakaj preobremenitev metode ni mogoča s spremembo vrste povratka
  5. Ali lahko preobremenimo glavno metodo
  6. 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.

preobremenitev metode java

Prednost preobremenitve metode

Preobremenitev metode poveča berljivost programa .

Različni načini preobremenitve metode

Obstajata dva načina za preobremenitev metode v Javi

  1. S spreminjanjem števila argumentov
  2. 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:

Preobremenitev metode Java s promocijo vrste

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 

Ena vrsta ni implicitno povišana, na primer dvojne ni mogoče implicitno povišati v nobeno vrsto.