205 votes

Quelle est la principale différence entre l'Héritage et le Polymorphisme?

J'ai été présenté avec cette question en fin de module examen à livre ouvert aujourd'hui et je me suis retrouvé perdu. je lisais Head first Javaet les deux définitions semblait être exactement le même. je me demandais juste quelle est la PRINCIPALE différence était pour ma propre tranquillité d'esprit. je sais qu'il y a un certain nombre de questions similaires à cela, mais, je n'en n'ai vu qui y apporter une réponse définitive.

Merci, Darren

322voto

hvgotcodes Points 55375

L'héritage, c'est quand une classe dérive d'une "classe". Donc, si vous avez un Person classe, alors vous avez un Student classe qui étend la classe Person, Student hérite de toutes les choses qu' Person . Il y a quelques détails sur les modificateurs d'accès que vous mettez sur les champs/méthodes en Personne, mais c'est l'idée de base. Par exemple, si vous avez un domaine privé sur Person, Student ne verrez pas cela parce que c'est privé, privé et les champs ne sont pas visibles dans les sous-classes.

Polymorphisme concerne la façon dont le programme décide des méthodes qu'il faut utiliser, en fonction du type de chose. Si vous avez un Person, ce qui a un read méthode, et vous avez un Student qui s'étend Person, qui a sa propre implémentation d' read, la méthode est appelée, est déterminé par le moment de l'exécution, en fonction de si vous avez un Person ou Student. Cela devient un peu difficile, mais si vous faites quelque chose comme

Person p = new Student();
p.read();

la méthode de lecture sur l'Étudiant est appelé. C'est le polymorphisme. Vous pouvez faire cette mission, parce qu'un Student est Person, mais l'exécution est assez intelligent pour savoir que le type réel de l' p est Étudiant.

Notez que les détails diffèrent entre les langues. Vous pouvez faire de l'héritage en javascript par exemple, mais elle est totalement différente de la façon dont il fonctionne en Java.

246voto

Ted Hopp Points 122617

L'héritage se réfère à l'aide de la structure et le comportement d'une super-classe dans une sous-classe. Le polymorphisme se réfère à l'évolution du comportement d'une super-classe de la classe.

77voto

Davy8 Points 12458

Polymorphisme: La capacité de traiter des objets de types différents dans une manière similaire. Exemple: la Girafe et le Crocodile sont les deux Animaux, et les animaux peuvent - Move. Si vous avez une instance d'un Animal , alors vous pouvez communiquer Move sans le savoir ou s'occuper quel type d'animal qu'il est.

L'héritage: C'est un moyen d'atteindre à la fois le Polymorphisme et la réutilisation du code en même temps.

D'autres formes de polymorphisme: Il y a d'autres façon de réaliser le polymorphisme, comme par exemple les interfaces, qui prévoient que le polymorphisme, mais pas de la réutilisation de code (parfois, le code est tout à fait différent, comme Move pour un Serpent serait tout à fait différent de Move , pour un Chien, dans ce cas, une Interface serait le mieux polymorphes choix dans ce cas.

Dans d'autres langages dynamiques polymorphisme peut être réalisé avec du Duck-Typing, qui est les classes n'ont même pas besoin de partager la même base de la classe ou de l'interface, ils ont juste besoin d'une méthode avec le même nom. Ou encore plus dynamique comme le Javascript, vous n'avez même pas besoin classes à tous, juste un objet avec le même nom de méthode peut être utilisée polymorphically.

18voto

Chris Thompson Points 18375

La principale différence est le polymorphisme est un résultat spécifique de l'héritage. Le polymorphisme est où la méthode invoquée est déterminé au moment de l'exécution en fonction du type de l'objet. C'est une situation que les résultats lorsque vous avez une classe héritant de l'autre et du remplacement d'une méthode particulière. Cependant, dans un arbre d'héritage, vous n'avez pas à redéfinir des méthodes et, par conséquent, pas tous les appels de méthode doivent être polymorphes. Cela fait-il sens? C'est un problème similaire à tous les véhicules Ford sont des voitures, mais pas toutes les voitures sont des Gués (bien que pas tout à fait....).

En outre, le polymorphisme traite de l'invocation de méthode alors que l'héritage décrit également les membres de données, etc.

13voto

AmitK Points 51

Polymorphisme: Supposons que vous travaillez pour une entreprise qui vend des stylos. Donc, vous faites une très belle classe appelée "Stylo" qui gère tout ce que vous devez savoir au sujet d'un stylo. Vous écrire toutes sortes de classes pour la facturation, l'expédition, de créer des factures à l'aide du Stylet de la classe. Un jour le patron vient et dit que, "de Grandes des nouvelles! La société est en pleine croissance et nous sommes à la vente de Livres & CD est maintenant!" Pas de grandes nouvelles, parce que maintenant vous avez à changer à chaque classe qui utilise le Stylet pour utiliser également le Livre et sur le CD. Mais que faire si vous aviez créé à l'origine d'une interface appelée "SellableProduct", et le Stylo mise en œuvre de cette interface. Vous pourriez avoir écrit toutes vos expéditions, facturation, etc des classes à utiliser que l'interface au lieu de la Plume. Maintenant tout ce que vous avez à faire est de créer une nouvelle classe appelée du Livre Et de la CompactDisc qui met en œuvre la SellableProduct interface. En raison du polymorphisme, toutes les autres classes pourraient continuer à fonctionner sans changement! Un Sens?

Donc, cela signifie que l'utilisation de l'Héritage qui est l'une des façon d'atteindre le polymorphisme.

Polymorhism peut être possible dans une classe ou interface mais l'Héritage toujours entre 2 OU plusieurs classes / interfaces. L'héritage de toujours se conformer "est-un" de la relation qu'il n'est pas toujours avec le Polymorphisme (qui peut être conforme à la fois "est-un" / "a-un" de la relation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X