logo

Surcharge de méthode en Java

  1. Différentes manières de surcharger la méthode
  2. En changeant le no. d'arguments
  3. En changeant le type de données
  4. Pourquoi la surcharge de méthode n'est pas possible en modifiant le type de retour
  5. Pouvons-nous surcharger la méthode principale
  6. 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.

surcharge de la méthode Java

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

  1. En changeant le nombre d'arguments
  2. 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 :

Surcharge de méthode Java avec promotion de type

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 

Un type n'est pas rétrogradé implicitement, par exemple double ne peut pas être rétrogradé implicitement vers un type quelconque.