- Verschillende manieren om de methode te overbelasten
- Door het veranderen van nr. van argumenten
- Door het gegevenstype te wijzigen
- Waarom overbelasting van methoden niet mogelijk is door het retourtype te wijzigen
- Kunnen we de hoofdmethode overbelasten
- methode overbelasting met Type Promotie
Als een klas heeft meerdere methoden met dezelfde naam maar met verschillende parameters, het staat bekend als Methode Overbelasting .
Als we slechts één bewerking hoeven uit te voeren, vergroot het hebben van dezelfde naam van de methoden de leesbaarheid van de programma .
substring-methode in Java
Stel dat u de gegeven getallen moet optellen, maar er kunnen een willekeurig aantal argumenten zijn. Als u de methode schrijft zoals a(int,int) voor twee parameters, en b(int,int,int) voor drie parameters, dan is het Het kan voor u en voor andere programmeurs moeilijk zijn om het gedrag van de methode te begrijpen, omdat de naam ervan verschilt.
We voeren dus methode-overbelasting uit om het programma snel te achterhalen.
Voordeel van overbelasting van de methode
Methode overbelasting verhoogt de leesbaarheid van het programma .
Verschillende manieren om de methode te overbelasten
Er zijn twee manieren om de methode in Java te overbelasten
- Door het aantal argumenten te veranderen
- Door het gegevenstype te wijzigen
In Java is Method Overloading niet mogelijk door alleen het retourtype van de methode te wijzigen.
1) Methode Overbelasting: nr. wijzigen van argumenten
In dit voorbeeld hebben we twee methoden gemaakt: de eerste methode add() voert de optelling van twee getallen uit en de tweede methode add voert de optelling van drie getallen uit.
In dit voorbeeld zijn we aan het creëren statische methoden zodat we geen instantie hoeven te maken voor het aanroepen van methoden.
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 het nu
Uitgang:
22 33
2) Methode-overbelasting: het gegevenstype van argumenten wijzigen
In dit voorbeeld hebben we twee methoden gemaakt die verschillen in Test het nu
Uitgang:
22 24.9
V) Waarom is overbelasting van methoden niet mogelijk door alleen het retourtype van de methode te wijzigen?
In Java is overbelasting van de methode niet mogelijk door het retourneringstype van de methode alleen te wijzigen vanwege dubbelzinnigheid. Laten we eens kijken hoe dubbelzinnigheid kan optreden:
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 het nu
Uitgang:
Compile Time Error: method add(int,int) is already defined in class Adder
Systeem.out.println(Adder.add(11,11)); //Hoe kan Java hier bepalen welke methode sum() moet worden aangeroepen?
Opmerking: Compile Time Error is beter dan Run Time Error. De Java-compiler geeft dus een compilertijdfout weer als u dezelfde methode declareert met dezelfde parameters.
Kunnen we de java main()-methode overbelasten?
Ja, door overbelasting van de methode. U kunt een willekeurig aantal hoofdmethoden in een klasse hebben door methode-overbelasting. Maar JVM roept de methode main() aan die de stringarray alleen als argumenten ontvangt. Laten we het eenvoudige voorbeeld bekijken:
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 het nu
Uitgang:
main with String[]
Methode-overbelasting en typepromotie
Het ene type wordt impliciet gepromoveerd naar het andere als er geen overeenkomend datatype wordt gevonden. Laten we het concept begrijpen aan de hand van de onderstaande figuur:
css-rand
Zoals weergegeven in het bovenstaande diagram, kan byte worden gepromoveerd naar short, int, long, float of double. Het korte datatype kan worden gepromoveerd tot int, long, float of double. Het char-datatype kan worden gepromoveerd naar int, long, float of double enzovoort.
Voorbeeld van overbelasting van methoden met 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 het nu
Output:40 60
Voorbeeld van overbelasting van methoden met typepromotie als er een overeenkomst wordt gevonden
Als er overeenkomende type-argumenten in de methode voorkomen, wordt typepromotie niet uitgevoerd.
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 het nu
Output:int arg method invoked
Voorbeeld van overbelasting van methoden met typepromotie in geval van dubbelzinnigheid
Als er geen overeenkomende argumenten in de methode voorkomen, en elke methode een vergelijkbaar aantal argumenten promoot, zal er sprake zijn van dubbelzinnigheid.
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 het nu
Output:Compile Time Error