logo

Módszer túlterhelés Java-ban

  1. A módszer túlterhelésének különböző módjai
  2. A sz. érvek
  3. Az adattípus megváltoztatásával
  4. Miért nem lehetséges a metódus túlterhelése a visszatérési típus megváltoztatásával?
  5. Túlterhelhetjük-e a fő módszert
  6. módszer túlterhelése a Type Promotion segítségével

Ha egy osztály több, azonos nevű, de eltérő paraméterekkel rendelkező metódussal rendelkezik Módszer Túlterhelés .

Ha csak egy műveletet kell végrehajtanunk, a metódusok azonos elnevezése növeli a metódusok olvashatóságát program .

sztringben összehasonlítani

Tegyük fel, hogy össze kell adni a megadott számokat, de az argumentumok száma tetszőleges lehet, ha olyan metódust írunk be, mint például a(int,int) két paraméterhez, és b(int,int,int) három paraméterhez, akkor Önnek és más programozóknak is nehéz lehet megérteni a metódus viselkedését, mert a neve eltér.

Tehát módszertúlterhelést hajtunk végre, hogy gyorsan kitaláljuk a programot.

java metódus túlterhelés

A módszer túlterhelésének előnye

A módszer túlterhelése növeli a program olvashatóságát .

A módszer túlterhelésének különböző módjai

Kétféleképpen lehet túlterhelni a módszert java-ban

  1. Az argumentumok számának megváltoztatásával
  2. Az adattípus megváltoztatásával

Java-ban a Method Overloading nem lehetséges a metódus visszatérési típusának megváltoztatásával.


1) Módszer Túlterhelés: a sz. érvek

Ebben a példában két metódust hoztunk létre, az első add() metódus két szám összeadását hajtja végre, a második add metódus pedig három szám összeadását hajtja végre.

Ebben a példában létrehozunk statikus módszerek hogy ne kelljen példányt létrehoznunk metódusok hívásához.

 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)); }} 
Tesztelje most

Kimenet:

 22 33 


2) Method Overloading: az argumentumok adattípusának megváltoztatása

Ebben a példában két módszert hoztunk létre, amelyek különböznek egymástól Tesztelje most

Kimenet:

 22 24.9 

K) Miért nem lehetséges a Method Overloading csak a metódus visszatérési típusának megváltoztatásával?

Java-ban a metódus túlterhelése nem lehetséges a metódus visszatérési típusának megváltoztatásával, csak a kétértelműség miatt. Nézzük meg, hogyan fordulhat elő kétértelműség:

 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 }} 
Tesztelje most

Kimenet:

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

System.out.println(Adder.add(11,11)); //Itt a java hogyan tudja meghatározni, hogy melyik sum() metódust kell meghívni?

Megjegyzés: A fordítási idő hiba jobb, mint a Run Time Error. Tehát a java fordító fordítóidő-hibát jelenít meg, ha ugyanazt a metódust ugyanazokkal a paraméterekkel deklarálja.

Túlterhelhetjük a java main() metódust?

Igen, módszer túlterhelés miatt. Egy osztályban tetszőleges számú fő metódus lehet metódusonkénti túlterhelés. De JVM meghívja a main() metódust, amely csak argumentumként kapja meg a string tömböt. Lássuk az egyszerű példát:

 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');} } 
Tesztelje most

Kimenet:

 main with String[] 

Módszer túlterhelés és típus promóció

Az egyik típus implicit módon egy másikra lép elő, ha nem található megfelelő adattípus. Értsük meg a fogalmat az alábbi ábra alapján:

Java Method Overloading Type Promotion

Amint a fenti diagramon látható, a bájt előléptethető rövidre, intre, hosszúra, lebegőpontosra vagy kétszeresre. A rövid adattípus előléptethető int, long, float vagy double értékre. A char adattípus előléptethető int, long, float vagy double stb.

Példa a módszer túlterhelésére TypePromotion segítségével

 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); } } 
Tesztelje most
 Output:40 60 

Példa a módszer túlterhelésére típuspromócióval, ha egyezés található

Ha a metódusban egyező típusú argumentumok vannak, a típus nem kerül végrehajtásra.

uri vs url
 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 } } 
Tesztelje most
 Output:int arg method invoked 

Példa a módszer túlterhelésére típuspromócióval kétértelműség esetén

Ha a metódusban nincsenek egyező típusú argumentumok, és mindegyik metódus hasonló számú argumentumot támogat, akkor kétértelműség lép fel.

 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 } } 
Tesztelje most
 Output:Compile Time Error 

Az egyik típus nem kerül visszalépésre implicit módon, például a double nem vonható vissza semmilyen típusba implicit módon.