Quelle est la différence entre une surcharge de méthode et un dépassement?

Quelle est la différence entre surcharger une méthode et remplacer une méthode? Quelqu’un peut-il l’expliquer avec un exemple?

La surcharge de méthode concerne la notion d’avoir deux méthodes ou plus dans la même classe avec le même nom mais des arguments différents.

void foo(int a) void foo(int a, float b) 

La substitution de méthode implique d’avoir deux méthodes avec les mêmes arguments, mais des implémentations différentes. L’une d’elles existe dans la classe parente, tandis qu’une autre sera dans la classe dérivée ou enfant. L’annotation @Override , bien qu’elle ne soit pas obligatoire, peut être utile pour forcer le remplacement d’une méthode au moment de la compilation.

 class Parent { void foo(double d) { // do something } } class Child extends Parent { @Override void foo(double d){ // this method is overridden. } } 

La substitution de méthode se produit lorsqu’une classe enfant redéfinit la même méthode qu’une classe parente, avec les mêmes parameters. Par exemple , la classe Java standard java.util.LinkedHashSet étend java.util.HashSet . La méthode add() est remplacée dans LinkedHashSet . Si vous avez une variable de type HashSet et que vous appelez sa méthode add() , elle appellera l’implémentation appropriée de add() , selon qu’il s’agit d’un HashSet ou d’un LinkedHashSet . C’est ce qu’on appelle le polymorphism.

La surcharge de méthode définit plusieurs méthodes de la même classe, acceptant des nombres et des types de parameters différents. Dans ce cas, la méthode réelle appelée est décidée à la compilation, en fonction du nombre et des types d’arguments. Par exemple , la méthode System.out.println() est surchargée, ce qui vous permet de passer ints aussi bien que des chaînes et appelle une version différente de la méthode.