- A módszer túlterhelésének különböző módjai
- A sz. érvek
- Az adattípus megváltoztatásával
- Miért nem lehetséges a metódus túlterhelése a visszatérési típus megváltoztatásával?
- Túlterhelhetjük-e a fő módszert
- 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.
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
- Az argumentumok számának megváltoztatásával
- 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:
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