logo

Metodeoverbelastning i Java

  1. Forskellige måder at overbelaste metoden på
  2. Ved at ændre nr. af argumenter
  3. Ved at ændre datatypen
  4. Hvorfor metodeoverbelastning ikke er mulig ved at ændre returtypen
  5. Kan vi overbelaste hovedmetoden
  6. metodeoverbelastning med Type Promotion

Hvis en klasse har flere metoder med samme navn, men forskellige i parametre, er det kendt som Metode Overbelastning .

Hvis vi kun skal udføre én operation, øger det at have samme navn på metoderne læsbarheden af program .

java læse csv-fil

Antag at du skal udføre addition af de givne tal, men der kan være et hvilket som helst antal argumenter, hvis du skriver metoden såsom a(int,int) for to parametre og b(int,int,int) for tre parametre, så kan være svært for dig såvel som andre programmører at forstå metodens opførsel, fordi dens navn er forskelligt.

Så vi udfører metodeoverbelastning for hurtigt at finde ud af programmet.

java metode overbelastning

Fordel ved metodeoverbelastning

Metode overbelastning øger programmets læsbarhed .

Forskellige måder at overbelaste metoden på

Der er to måder at overbelaste metoden i java

  1. Ved at ændre antallet af argumenter
  2. Ved at ændre datatypen

I Java er metodeoverbelastning ikke mulig ved kun at ændre metodens returtype.


1) Metode Overbelastning: skiftende nr. af argumenter

I dette eksempel har vi lavet to metoder, den første add()-metode udfører addition af to tal og den anden add-metode udfører addition af tre tal.

I dette eksempel skaber vi statiske metoder så vi ikke behøver at oprette instanser til opkaldsmetoder.

 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)); }} 
Test det nu

Produktion:

 22 33 


2) Metodeoverbelastning: ændring af datatype af argumenter

I dette eksempel har vi lavet to metoder, der adskiller sig i Test det nu

Produktion:

 22 24.9 

Q) Hvorfor metodeoverbelastning ikke er mulig ved kun at ændre metodens returtype?

I java er metodeoverbelastning ikke mulig ved at ændre metodens returtype kun på grund af tvetydighed. Lad os se, hvordan tvetydighed kan opstå:

 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 }} 
Test det nu

Produktion:

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

System.out.println(Adder.add(11,11)); //Her, hvordan kan java bestemme hvilken sum() metode der skal kaldes?

Bemærk: Compile Time Error er bedre end Run Time Error. Så java-kompileren gengiver kompileringstidsfejl, hvis du erklærer den samme metode med samme parametre.

Kan vi overbelaste java main()-metoden?

Ja, ved metode overbelastning. Du kan have et hvilket som helst antal hovedmetoder i en klasse for metode overbelastning. Men JVM kalder main()-metoden, som kun modtager string-array som argumenter. Lad os se det simple eksempel:

 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');} } 
Test det nu

Produktion:

 main with String[] 

Metodeoverbelastning og typefremme

Én type forfremmes implicit til en anden, hvis der ikke findes en matchende datatype. Lad os forstå konceptet med figuren nedenfor:

Java-metodeoverbelastning med typepromovering

Som vist i diagrammet ovenfor, kan byte forfremmes til kort, int, lang, float eller dobbelt. Den korte datatype kan forfremmes til int, long, float eller double. Char datatypen kan forfremmes til int, long, float eller double og så videre.

Eksempel på metodeoverbelastning med 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); } } 
Test det nu
 Output:40 60 

Eksempel på metodeoverbelastning med typepromovering, hvis matchning fundet

Hvis der er matchende typeargumenter i metoden, udføres typefremme ikke.

 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 } } 
Test det nu
 Output:int arg method invoked 

Eksempel på metodeoverbelastning med typefremme i tilfælde af uklarhed

Hvis der ikke er nogen matchende type-argumenter i metoden, og hver metode fremmer et lignende antal argumenter, vil der være tvetydighed.

 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 } } 
Test det nu
 Output:Compile Time Error 

En type depromoveres ikke implicit, for eksempel kan dobbelt ikke depromoveres til nogen type implicit.

heltal til streng i java