Surcharge de méthode

Notre nouveau et intéressant sujet d'aujourd'hui est la surcharge de méthodes . Attention, la surcharge de méthode ne doit pas être confondue avec le remplacement de méthode.

Contrairement à la surcharge, la surcharge est une opération très simple. Ce n'est en fait pas une opération sur les méthodes, bien qu'elle soit parfois désignée par le terrible terme de polymorphisme paramétrique .

Le problème ici est que toutes les méthodes d'une classe doivent avoir des noms uniques. Eh bien, ce n'est pas tout à fait exact. Eh bien, plus précisément, ce n'est pas exact du tout. Le nom de la méthode n'a pas besoin d'être unique. Ce qui doit être unique, c'est l'union du nom de la méthode et des types des paramètres de la méthode. Cette union est connue sous le nom de signature de méthode

Exemples:

Code Description
public void print();
public void print2();
Ceci est autorisé. Les deux méthodes ont des noms uniques.
public void print();
public void print(int n);
Et aussi ceci. Les deux méthodes ont des noms uniques (signatures).
public void print(int n, int n2);
public void print(int n);
Les méthodes sont encore uniques
public int print(int a);
public void print(int n);
Mais ce n'est pas autorisé . Les méthodes ne sont pas uniques . Même s'ils renvoient des types différents.
public int print(int a, long b);
public long print(long b, int a);
Mais vous pouvez le faire . Les paramètres de la méthode sont uniques

La signature inclut le nom de la méthode et les types de paramètres . Il n'inclut pas le type de retour de la méthode ni les noms des paramètres . Une classe ne peut pas avoir deux méthodes avec les mêmes signatures — le compilateur ne saura pas laquelle appeler.

Les noms des paramètres n'ont pas d'importance , car ils sont perdus lors de la compilation. Une fois qu'une méthode est compilée, seuls son nom et ses types de paramètres sont connus. Le type de retour n'est pas perdu, mais le résultat de la méthode n'a pas besoin d'être affecté à quoi que ce soit, il n'est donc pas non plus inclus dans la signature.

Selon les principes de la POO , le polymorphisme cache différentes implémentations derrière une seule interface. Lorsque nous appelons la System.out.println()méthode, par exemple, différentes méthodes sont appelées en fonction des arguments passés. C'est le polymorphisme en action.

C'est pourquoi différentes méthodes avec des noms identiques contenus dans la même classe sont considérées comme une forme faible de polymorphisme.