- Ulike måter å overbelaste metoden på
- Ved å endre nr. av argumenter
- Ved å endre datatypen
- Hvorfor metodeoverbelastning ikke er mulig ved å endre returtype
- Kan vi overbelaste hovedmetoden
- metodeoverbelastning med Type Promotion
Hvis en klasse har flere metoder med samme navn, men forskjellige i parametere, det er kjent som Metode Overbelastning .
Hvis vi bare må utføre én operasjon, øker det å ha samme navn på metodene lesbarheten til program .
tilpasset unntak i java
Anta at du må utføre addisjon av de gitte tallene, men det kan være et hvilket som helst antall argumenter, hvis du skriver metoden som a(int,int) for to parametere, og b(int,int,int) for tre parametere kan være vanskelig for deg så vel som andre programmerere å forstå metodens oppførsel fordi navnet er forskjellig.
Så vi utfører metodeoverbelastning for å finne ut programmet raskt.
Fordel med metodeoverbelastning
Metode overbelastning øker lesbarheten til programmet .
Ulike måter å overbelaste metoden på
Det er to måter å overbelaste metoden i java
- Ved å endre antall argumenter
- Ved å endre datatypen
I Java er metodeoverbelastning ikke mulig ved kun å endre returtypen til metoden.
1) Metode Overbelastning: skiftenr. av argumenter
I dette eksemplet har vi laget to metoder, den første add()-metoden utfører addisjon av to tall og den andre add-metoden utfører addisjon av tre tall.
I dette eksemplet lager vi statiske metoder slik at vi ikke trenger å lage instanser for kallemetoder.
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 nå
Produksjon:
22 33
2) Metodeoverbelastning: endre datatype argumenter
I dette eksemplet har vi laget to metoder som er forskjellige i Test det nå
Produksjon:
22 24.9
Sp) Hvorfor metodeoverbelastning ikke er mulig ved kun å endre returtype?
I java er metodeoverbelastning ikke mulig ved å endre returtypen til metoden bare på grunn av tvetydighet. La oss se hvordan tvetydighet kan oppstå:
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 nå
Produksjon:
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 som skal kalles?
Merk: Compile Time Error er bedre enn Run Time Error. Så java-kompilatoren gjengir kompilatortidsfeil hvis du erklærer den samme metoden med samme parametere.
Kan vi overbelaste java main()-metoden?
Ja, ved metode overbelastning. Du kan ha et hvilket som helst antall hovedmetoder i en klasse for metode overbelastning. Men JVM kaller main()-metoden som mottar string array kun som argumenter. La oss se det enkle eksemplet:
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 nå
Produksjon:
main with String[]
Metodeoverbelastning og typepromotering
En type forfremmes implisitt til en annen hvis ingen samsvarende datatype blir funnet. La oss forstå konseptet med figuren nedenfor:
Som vist i diagrammet ovenfor, kan byte forfremmes til kort, int, lang, flytende eller dobbel. Den korte datatypen kan forfremmes til int, long, float eller double. Char datatype 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 nå
Output:40 60
Eksempel på metodeoverbelastning med typepromotering hvis samsvar funnet
Hvis det er matchende typeargumenter i metoden, utføres ikke typepromotering.
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 nå
Output:int arg method invoked
Eksempel på metodeoverbelastning med typepromotering ved uklarhet
Hvis det ikke er noen matchende type-argumenter i metoden, og hver metode fremmer tilsvarende antall argumenter, vil det være tvetydighet.
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 nå
Output:Compile Time Error
Én type er ikke depromoveret implisitt, for eksempel kan dobbel ikke depromoveres til noen type implisitt.
Spørsmål til intervju med java språk