logo

Preopterećenje metoda u Javi

  1. Različiti načini preopterećenja metode
  2. Promjenom br. argumenata
  3. Promjenom tipa podataka
  4. Zašto preopterećenje metode nije moguće promjenom vrste povrata
  5. Možemo li preopteretiti glavnu metodu
  6. preopterećenje metode s Type Promotion

Ako a razreda ima više metoda s istim imenom, ali različitim parametrima, poznat je kao Preopterećenje metode .

Ako moramo izvesti samo jednu operaciju, isti naziv metoda povećava čitljivost program .

javascript globalne varijable

Pretpostavimo da morate izvršiti zbrajanje zadanih brojeva, ali može postojati bilo koji broj argumenata, ako napišete metodu kao što je a(int,int) za dva parametra i b(int,int,int) za tri parametra, onda je vama, kao i drugim programerima, može biti teško razumjeti ponašanje metode jer se njezin naziv razlikuje.

Dakle, vršimo preopterećenje metoda kako bismo brzo shvatili program.

preopterećenje java metode

Prednost preopterećenja metode

Preopterećenje metode povećava čitljivost programa .

Različiti načini preopterećenja metode

Postoje dva načina za preopterećenje metode u Javi

  1. Promjenom broja argumenata
  2. Promjenom vrste podataka

U Javi, preopterećenje metode nije moguće samo promjenom vrste povrata metode.


1) Preopterećenje metode: mijenjanje br. argumenata

U ovom smo primjeru stvorili dvije metode, prva metoda add() izvodi zbrajanje dva broja, a druga metoda add izvodi zbrajanje tri broja.

U ovom primjeru mi stvaramo statičke metode tako da ne moramo kreirati instancu za pozivanje metoda.

 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)); }} 
Testirajte sada

Izlaz:

 22 33 


2) Preopterećenje metode: mijenjanje tipa podataka argumenata

U ovom smo primjeru stvorili dvije metode koje se razlikuju Testirajte sada

Izlaz:

 22 24.9 

P) Zašto preopterećenje metode nije moguće samo promjenom povratne vrste metode?

U Javi, preopterećenje metode nije moguće promjenom vrste povrata metode samo zbog dvosmislenosti. Pogledajmo kako može doći do dvosmislenosti:

 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 }} 
Testirajte sada

Izlaz:

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

System.out.println(Adder.add(11,11)); //Ovdje, kako java može odrediti koju metodu sum() treba pozvati?

Napomena: Pogreška vremena kompajliranja bolja je od pogreške vremena izvođenja. Dakle, java prevodilac prikazuje pogrešku vremena prevoditelja ako deklarirate istu metodu koja ima iste parametre.

Možemo li preopteretiti java main() metodu?

Da, preopterećenjem metode. Preopterećenjem metoda možete imati bilo koji broj glavnih metoda u klasi. Ali JVM poziva main() metodu koja prima samo niz znakova kao argumente. Pogledajmo jednostavan primjer:

 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');} } 
Testirajte sada

Izlaz:

 main with String[] 

Preopterećenje metode i promicanje tipa

Jedan tip se implicitno promiče u drugi ako se ne pronađe odgovarajući tip podataka. Razumimo koncept pomoću donje slike:

Preopterećenje Java metode s promicanjem tipa

Kao što je prikazano na gornjem dijagramu, bajt se može unaprijediti u short, int, long, float ili double. Kratki tip podataka može se unaprijediti u int, long, float ili double. Tip podataka char može se unaprijediti u int, long, float ili double i tako dalje.

Primjer preopterećenja 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); } } 
Testirajte sada
 Output:40 60 

Primjer preopterećenja metode s promicanjem tipa ako je pronađeno podudaranje

Ako u metodi postoje argumenti tipa koji se podudaraju, promicanje tipa se ne izvodi.

 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 } } 
Testirajte sada
 Output:int arg method invoked 

Primjer preopterećenja metode s promicanjem tipa u slučaju dvosmislenosti

Ako u metodi nema argumenata odgovarajućeg tipa, a svaka metoda promiče sličan broj argumenata, doći će do dvosmislenosti.

komisija za odabir osoblja značenje
 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 } } 
Testirajte sada
 Output:Compile Time Error 

Jedan tip nije implicitno depromaknut, na primjer, double se ne može implicitno depromaknuti ni u jedan tip.