le multi-méthode serait un cas particulier de polymorphisme.
Le polymorphisme peut être statique lorsqu'on peut déterminer à la compilation quel code il faut exécuter, en regardant les types des arguments.
Ou dynamique, lorsqu'on ne sait pas à l'avance quel code sera exécuté, parce qu'un argument (mono-méthode) est de type dynamique ou que plusieurs (multi-méthode) le sont.
A noter que pour une méthode, il faut considérer la classe comme un premier argument.
En C++/Java, une méthode virtuelle est en général une mono-méthode, sinon une "multi-méthode".
Wikipédia montre un 1er exemple d'imitation de multi-méthodes en C++ (applicable aussi en Java), en déterminant le(s) type(s) manuellement (ici, par essais de transtypages), puis en appelant le bon code.
La 2è implémentation en C++ est plus élégante mais suppose d'avoir des arguments permutables (d'ailleurs, il faut s'assurer que 'void Asteroid::collide_with(Spaceship *)' et 'void Spaceship::collide_with(Asteroid *)' soient identiques, l'une appelant l'autre).
Ton exemple de code Java est correct, mais on n'a même pas affaire à des mono-méthodes.
# Si j'ai bien compris l'article Wikipédia...
Posté par lcld . En réponse au message C'est quoi le multi-méthode ?. Évalué à 3.
Le polymorphisme peut être statique lorsqu'on peut déterminer à la compilation quel code il faut exécuter, en regardant les types des arguments.
Ou dynamique, lorsqu'on ne sait pas à l'avance quel code sera exécuté, parce qu'un argument (mono-méthode) est de type dynamique ou que plusieurs (multi-méthode) le sont.
A noter que pour une méthode, il faut considérer la classe comme un premier argument.
En C++/Java, une méthode virtuelle est en général une mono-méthode, sinon une "multi-méthode".
Wikipédia montre un 1er exemple d'imitation de multi-méthodes en C++ (applicable aussi en Java), en déterminant le(s) type(s) manuellement (ici, par essais de transtypages), puis en appelant le bon code.
La 2è implémentation en C++ est plus élégante mais suppose d'avoir des arguments permutables (d'ailleurs, il faut s'assurer que 'void Asteroid::collide_with(Spaceship *)' et 'void Spaceship::collide_with(Asteroid *)' soient identiques, l'une appelant l'autre).
Ton exemple de code Java est correct, mais on n'a même pas affaire à des mono-méthodes.