Ce problème est vraiment un casse-tête, peu importe comment vous le dites
Vue 1 : Les trois éléments du polymorphisme, 1, 2, 3
Donc la surcharge n'est pas un polymorphisme
Vue 2 :
Mentionné dans le livre Java Virtual Machine
Certaines des manifestations les plus fondamentales des caractéristiques du polymorphisme, telles que la « surcharge » et la « réécriture » Section 8.1
Cela signifie que la surcharge et la réécriture sont toutes deux des manifestations du polymorphisme
Comment comprenez-vous
Chaque livre est traduit différemment, il est préférable de préciser le terme anglais, qu'il s'agisse deOverrideou deOverload.
Overrideest une manifestation de polymorphisme (par exemple
ne l'est pas (par exemple@Override public String toString() {...}
), mais@Override public String toString() {...}
),但Overload不是(例如PrintStream.println()
和PrintStream.println(String s)
OverloadPrintStream.println() code > et
PrintStream.println(String s)
).En fait, il existe trois équivalents anglais du « surcharge » chinois : override, surcharge et overwrite. Plus tard, le dernier a été progressivement traduit par « réécrire » ou « réécrire ».
Override fait référence à la pratique consistant à redéfinir les fonctions de la classe parent avec la même signature. Dans ce cas, la fonction de classe parent et la fonction de classe enfant sont des entités indépendantes. Mais lors de l'appel, le compilateur (ou l'interprète) peut déterminer quelle implémentation appeler en fonction du type réel de l'objet.
overload fait référence à plusieurs implémentations du même nom de fonction qui ne peuvent pas être signées. Dans ce cas, le même nom de fonction peut souvent être appelé avec différents types de paramètres pour produire des résultats différents. Un exemple typique est
max(int, int)
和max(double, double)
etc.overwrite est généralement la réécriture d'une fonction avec la même signature de la classe parent par une sous-classe. Les signatures des deux fonctions sont les mêmes, mais elles n'ont rien à voir l'une avec l'autre. Dans ce cas, le type de classe parent fait référence à l'objet de sous-classe et la méthode appelante est la méthode de classe parent appelée (notez la différence avec le remplacement)
À propos de la différence entre écraser et remplacer, comme indiqué ci-dessous
Parlons maintenant du polymorphisme. Regardons d'abord la définition du polymorphisme :
Le polymorphisme fait référence à une même entité ayant plusieurs formes en même temps. (Bing Musique)
Polymorphisme signifie littéralement « états multiples ». Dans les langages orientés objet, plusieurs implémentations différentes d’une interface sont appelées polymorphisme. (Encyclopédie Baidu)
D'après la définition, la « surcharge » n'a rien à voir avec le polymorphisme, mais la surcharge est une forme de polymorphisme. D'autres incluent les interfaces, les abstractions, les fonctions virtuelles, les modèles, les génériques..., et puis de Baidu Quelques citations de l'encyclopédie :
Il peut y avoir des erreurs de traduction. Le polymorphisme signifie que les objets présentent des caractéristiques différentes dans différents contextes. Par exemple, une sous-classe Child hérite de la classe parent parent et une nouvelle méthode est ajoutée à la classe Child, save. . Utilisez également directement Child child1=new Child(), l'objet child1 peut appeler les méthodes de sauvegarde et de connexion, utilisez Parent child2 = new Child(), l'objet child2 ne peut utiliser que la méthode de connexion. Cela dépend donc du contexte.