« Bonjour, Amigo ! Je vais te parler de la surcharge de méthodes. »

« Tu peux les surcharger aussi !? Quelle journée ! »

« Tu peux faire beaucoup de choses avec, mais ce n'est pas la question aujourd'hui. »

« Ça me va. »

« La surcharge est une opération très simple. En fait, ce n'est même pas une opération sur les méthodes, même si on lui donne parfois un nom effrayant : polymorphisme paramétrique. »

Ce que tu dois retenir, c'est que chaque méthode dans une classe doit avoir un nom unique.

« Oui, je le sais déjà. »

« Pourtant, ce n'est pas tout à fait exact. En fait, ce n'est pas vrai du tout. Une méthode n'a pas besoin d'avoir un nom unique. Ce qui doit être unique est la combinaison d'un nom de méthode et des types de ses paramètres. Cette combinaison est également connue sous le nom de signature de méthode. »

Code Commentaires
public void print();
public void print2();
C'est autorisé. Les deux méthodes ont des noms uniques.
public void print();
public void print(int n);
Et cela est également autorisé. Les deux méthodes ont des noms (signatures) uniques.
public void print(int n, int n2);
public void print(int n);
Les noms des méthodes sont toujours uniques ici.
public int print(int a);
public void print(int n);
Cela n’est pas autorisé. Les méthodes ne sont pas uniques, même si des noms de variable différents sont passés.
public int print(int a, long b);
public long print(long b, int a);
Mais cela est autorisé. Les paramètres de la méthode sont uniques.

« J'ai déjà vu ça quelque part. »

« Oui. Lorsque tu saisis « System.out.println », IntelliJ IDEA suggère des dizaines de versions de méthodes print qui utilisent des paramètres différents. Le compilateur les identifie et appelle ensuite la méthode requise en fonction des types de paramètres que tu lui passes. »

« Ce n'est pas si difficile. Mais ce n'est pas du polymorphisme. »

« Ou plus précisément, ce n'est pas du remplacement de méthode. »

Soit dit en passant, je tiens à souligner que les noms des paramètres ne sont pas significatifs. Ils sont perdus lors de la compilation. Une fois que la méthode est compilée, seuls son nom et ses types de paramètres sont connus.