logo

Preťaženie metódy v jazyku Java

  1. Rôzne spôsoby preťaženia metódy
  2. Zmenou č. argumentov
  3. Zmenou dátového typu
  4. Prečo preťaženie metódy nie je možné zmenou typu návratu
  5. Môžeme preťažiť hlavnú metódu
  6. preťaženie metódy pomocou Type Promotion

Ak trieda má viacero metód s rovnakým názvom, ale odlišnými parametrami, je známy ako Preťaženie metódy .

Ak musíme vykonať iba jednu operáciu, rovnaký názov metód zvyšuje čitateľnosť program .

Java null check

Predpokladajme, že musíte vykonať sčítanie daných čísel, ale môže existovať ľubovoľný počet argumentov, ak napíšete metódu ako a(int,int) pre dva parametre a b(int,int,int) pre tri parametre, potom to môže byť pre vás, ako aj pre iných programátorov ťažké pochopiť správanie metódy, pretože jej názov sa líši.

Preto vykonávame preťaženie metódy, aby sme program rýchlo zistili.

preťažovanie java metódy

Výhoda preťaženia metódy

Preťaženie metódy zvyšuje čitateľnosť programu .

Rôzne spôsoby preťaženia metódy

Existujú dva spôsoby preťaženia metódy v jazyku Java

  1. Zmenou počtu argumentov
  2. Zmenou typu údajov

V jazyku Java nie je možné preťaženie metód iba zmenou návratového typu metódy.


1) Spôsob Preťaženie: zmena č. argumentov

V tomto príklade sme vytvorili dve metódy, prvá metóda add() vykoná sčítanie dvoch čísel a druhá metóda add vykoná sčítanie troch čísel.

V tomto príklade tvoríme statické metódy aby sme nemuseli vytvárať inštanciu na volanie metód.

 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)); }} 
Vyskúšajte to

Výkon:

 22 33 


2) Preťaženie metódy: zmena dátového typu argumentov

V tomto príklade sme vytvorili dve metódy, ktoré sa líšia Vyskúšajte to

Výkon:

 22 24.9 

Otázka: Prečo nie je možné preťaženie metódy iba zmenou typu návratu metódy?

V jave nie je možné preťaženie metódy zmenou návratového typu metódy len z dôvodu nejednoznačnosti. Pozrime sa, ako môže dôjsť k nejednoznačnosti:

 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 }} 
Vyskúšajte to

Výkon:

javascriptové operátory
 Compile Time Error: method add(int,int) is already defined in class Adder 

System.out.println(Adder.add(11,11)); //Ako môže java určiť, ktorá metóda sum() by sa mala volať?

Poznámka: Compile Time Error je lepšia ako Run Time Error. Takže kompilátor java vykreslí časovú chybu kompilátora, ak deklarujete rovnakú metódu s rovnakými parametrami.

Môžeme preťažiť metódu java main()?

Áno, metódou preťaženia. V triede môžete mať ľubovoľný počet hlavných metód preťažením metódy. ale JVM volá metódu main(), ktorá prijíma pole reťazcov iba ako argumenty. Pozrime sa na jednoduchý príklad:

 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');} } 
Vyskúšajte to

Výkon:

 main with String[] 

Preťaženie metódy a propagácia typu

Jeden typ sa implicitne povýši na iný, ak sa nenájde žiadny zodpovedajúci typ údajov. Poďme pochopiť koncept podľa obrázku nižšie:

Preťaženie metódy Java s podporou typu

Ako je znázornené vo vyššie uvedenom diagrame, bajt môže byť povýšený na short, int, long, float alebo double. Krátky dátový typ môže byť povýšený na int, long, float alebo double. Dátový typ char môže byť povýšený na int, long, float alebo double a tak ďalej.

Príklad preťaženia metódy pomocou 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); } } 
Vyskúšajte to
 Output:40 60 

Príklad preťaženia metódy s propagáciou typu, ak sa nájde zhoda

Ak sú v metóde zhodné argumenty typu, propagácia typu sa nevykoná.

 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 } } 
Vyskúšajte to
 Output:int arg method invoked 

Príklad preťaženia metódy s propagáciou typu v prípade nejasností

Ak v metóde nie sú žiadne zodpovedajúce argumenty typu a každá metóda podporuje podobný počet argumentov, bude to nejednoznačnosť.

 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 } } 
Vyskúšajte to
 Output:Compile Time Error 

Jeden typ nie je implicitne odstránený z propagácie, napríklad double nemôže byť implicitne presunutý na žiadny typ.