- Različiti načini preopterećenja metode
- Promjenom br. argumenata
- Promjenom tipa podataka
- Zašto preopterećenje metode nije moguće promjenom vrste povrata
- Možemo li preopteretiti glavnu metodu
- 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.
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
- Promjenom broja argumenata
- 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:
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