Maison > Questions et réponses > le corps du texte
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
仅有的幸福2017-06-12 09:22:06
Chaque livre est traduit différemment, il est préférable de préciser le terme anglais, qu'il s'agisse de Override ou de Overload.
Override est une manifestation de polymorphisme (par exemple @Override public String toString() {...}
), mais @Override public String toString() {...}
),但Overload不是(例如PrintStream.println()
和PrintStream.println(String s)
Overload
PrintStream.println() code > et PrintStream.println(String s)
). 🎜répondre0
给我你的怀抱2017-06-12 09:22:06
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 :
Pour faire simple, il s'agit d'une phrase : il est permis d'attribuer un pointeur d'un type de sous-classe à un pointeur d'un type de classe parent. Le polymorphisme est implémenté via des fonctions virtuelles en Pascal Objet et en C++.
Polymorphisme : La même opération agit sur différents objets et peut avoir différentes interprétations et produire des résultats d'exécution différents. Au moment de l'exécution, vous pouvez appeler des méthodes dans une classe dérivée via un pointeur vers la classe de base.
En C++, il existe les méthodes suivantes pour réaliser le polymorphisme : fonctions virtuelles, classes abstraites, remplacements et modèles (la surcharge n'a rien à voir avec le polymorphisme).
Le polymorphisme permet aux méthodes d'avoir le même nom. Les paramètres ou les valeurs de retour peuvent être transmis ou renvoyés par le type parent.
欧阳克2017-06-12 09:22:06
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.