- Différentes manières de surcharger la méthode
- En changeant le no. d'arguments
- En changeant le type de données
- Pourquoi la surcharge de méthode n'est pas possible en modifiant le type de retour
- Pouvons-nous surcharger la méthode principale
- surcharge de méthode avec la promotion de type
Si un classe a plusieurs méthodes ayant le même nom mais des paramètres différents, on l'appelle Surcharge de méthode .
Si nous devons effectuer une seule opération, avoir le même nom pour les méthodes augmente la lisibilité du programme .
interface comparable à Java
Supposons que vous deviez effectuer l'addition des nombres donnés mais qu'il puisse y avoir n'importe quel nombre d'arguments, si vous écrivez la méthode telle que a(int,int) pour deux paramètres et b(int,int,int) pour trois paramètres, alors elle Il peut être difficile pour vous ainsi que pour les autres programmeurs de comprendre le comportement de la méthode car son nom diffère.
Nous effectuons donc une surcharge de méthode pour comprendre rapidement le programme.
Avantage de la surcharge de méthode
Surcharge de méthode augmente la lisibilité du programme .
Différentes manières de surcharger la méthode
Il existe deux façons de surcharger la méthode en Java
- En changeant le nombre d'arguments
- En changeant le type de données
En Java, la surcharge de méthode n'est pas possible en modifiant uniquement le type de retour de la méthode.
1) Surcharge de méthode : changer le numéro. d'arguments
Dans cet exemple, nous avons créé deux méthodes, la première méthode add() effectue l'addition de deux nombres et la deuxième méthode add effectue l'addition de trois nombres.
Dans cet exemple, nous créons méthodes statiques afin que nous n'ayons pas besoin de créer une instance pour appeler des méthodes.
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)); }}Testez-le maintenant
Sortir:
22 33
2) Surcharge de méthode : modification du type de données des arguments
Dans cet exemple, nous avons créé deux méthodes qui diffèrent par Testez-le maintenant
Sortir:
22 24.9
Q) Pourquoi la surcharge de méthode n'est-elle pas possible en modifiant uniquement le type de retour de la méthode ?
En Java, la surcharge de méthode n'est pas possible en modifiant le type de retour de la méthode uniquement en raison d'une ambiguïté. Voyons comment une ambiguïté peut survenir :
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 }}Testez-le maintenant
Sortir:
chaîne en jsonobject
Compile Time Error: method add(int,int) is already defined in class Adder
System.out.println(Adder.add(11,11)); //Ici, comment Java peut-il déterminer quelle méthode sum() doit être appelée ?
Remarque : L'erreur de compilation est meilleure que l'erreur d'exécution. Ainsi, le compilateur Java génère une erreur de temps du compilateur si vous déclarez la même méthode ayant les mêmes paramètres.
Pouvons-nous surcharger la méthode Java main() ?
Oui, par surcharge de méthodes. Vous pouvez avoir n’importe quel nombre de méthodes principales dans une classe par surcharge de méthodes. Mais JVM appelle la méthode main() qui reçoit un tableau de chaînes comme arguments uniquement. Voyons l'exemple simple :
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');} }Testez-le maintenant
Sortir:
main with String[]
Surcharge de méthode et promotion de type
Un type est implicitement promu à un autre si aucun type de données correspondant n’est trouvé. Comprenons le concept par la figure ci-dessous :
Comme indiqué dans le diagramme ci-dessus, l'octet peut être promu en short, int, long, float ou double. Le type de données court peut être promu en int, long, float ou double. Le type de données char peut être promu en int, long, float ou double, etc.
Exemple de surcharge de méthode avec 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); } }Testez-le maintenant
Output:40 60
Exemple de surcharge de méthode avec promotion de type si une correspondance est trouvée
S'il existe des arguments de type correspondant dans la méthode, la promotion du type n'est pas effectuée.
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 } }Testez-le maintenant
Output:int arg method invoked
Exemple de surcharge de méthode avec promotion de type en cas d'ambiguïté
S'il n'y a pas d'arguments de type correspondant dans la méthode et que chaque méthode promeut un nombre similaire d'arguments, il y aura une ambiguïté.
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 } }Testez-le maintenant
Output:Compile Time Error