Quelle est la principale différence entre L'hérédité et le polymorphisme?

on m'a présenté cette question à la fin de l'examen du module livre ouvert aujourd'hui et je me suis retrouvé perdu. Je lisais Head first Java et les deux définitions semblaient être exactement les mêmes. Je me demandais juste quelle était la principale différence pour mon propre esprit. Je sais qu'il existe un certain nombre de questions similaires à celle-ci, mais je n'ai vu aucune réponse définitive.

129
demandé sur ROMANIA_engineer 2011-06-10 19:00:18

15 réponses

l'Héritage est quand une classe dérive d'une "classe". Donc si vous avez une classe Person , alors vous avez une classe Student qui s'étend Person , Student hérite de toutes les choses que Person A. Il y a quelques détails autour des 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 champ privé sur Person , Student ne le verra pas parce que son les champs privé et privé ne sont pas visibles dans les sous-classes.

polymorphisme traite de la façon dont le programme décide quelles méthodes il doit utiliser, selon le type de chose qu'il a. Si vous avez un Person , qui a une méthode read , et vous avez un Student qui s'étend Person , qui a sa propre implémentation de read , quelle méthode est appelée est déterminée pour vous par l'exécution, selon que vous avez un Person ou un 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 Étudiant est appelée. C'est le polymorphisme. Vous pouvez faire cette tâche parce qu'un Student est un Person , mais le runtime est assez intelligent pour savoir que le type réel de p est étudiant .

noter que les détails diffèrent selon les langues. Vous pouvez faire l'héritage en javascript par exemple, mais c'est complètement différent de la façon dont il fonctionne en Java.

241
répondu hvgotcodes 2011-09-14 14:53:18

Hérédité se réfère à utilisant la structure et le comportement d'une super classe dans une sous-classe.

polymorphisme fait référence à modification du comportement d'une super classe de la sous-classe.

155
répondu Ted Hopp 2018-01-23 19:58:02

polymorphisme : la capacité de traiter des objets de différents types d'une manière similaire. Exemple: girafe et Crocodile sont à la fois des animaux, et les animaux peuvent Move . Si vous avez un exemple de Animal alors vous pouvez appeler Move sans savoir ou se soucier de quel type d'animal il s'agit.

héritage : c'est une façon de parvenir à la fois au polymorphisme et à la réutilisation du code en même temps.

autres formes de polymorphisme : Il existe d'autres moyens de réaliser le polymorphisme, tels que les interfaces, qui ne fournissent que du polymorphisme mais aucune réutilisation de code (parfois le code est très différent, comme Move pour un serpent serait très différent de Move pour un chien, auquel cas une Interface serait le meilleur choix polymorphique dans ce cas.

dans d'autres langues dynamiques le polymorphisme peut être obtenu en tapant du Canard, ce qui est que les classes n'ont même pas besoin de partager la même classe de base ou interface, elles ont juste besoin d'une méthode avec le même nom. Ou encore plus dynamique comme Javascript, vous n'avez même pas besoin de classes du tout, juste un objet avec le même nom de méthode peut être utilisé polymorphiquement.

55
répondu Davy8 2011-06-10 15:16:08

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 qui résulte quand vous avez une classe héritant d'une autre et en dépassant une méthode particulière. Cependant, dans un arbre héréditaire normal, vous n'avez pas à outrepasser toutes les méthodes et donc pas tous les appels de méthode doivent être polymorphiques. Cela fait-il sens? C'est un problème similaire à tous les véhicules Ford sont des automobiles, mais toutes les automobiles ne sont pas des Ford (Bien que pas tout à fait....).

de plus, le polymorphisme traite de l'invocation de méthodes alors que l'hérédité décrit également les membres de données, etc.

17
répondu Chris Thompson 2011-06-10 15:03:21

en Java, les deux sont étroitement liés. Cela est dû au fait que Java utilise une technique d'invocation de méthode appelée "Dynamic dispatch". Si j'ai

public class A {
  public void draw() { ... }
  public void spin() { ... }
}

public class B extends A {
  public void draw() { ... }
  public void bad() { ... }
}

...

A testObject = new B();

testObject.draw(); // calls B's draw, polymorphic
testObject.spin(); // calls A's spin, inherited by B
testObject.bad(); // compiler error, you are manipulating this as an A

alors nous voyons que B hérite spin de A. Cependant, quand nous essayons de manipuler l'objet comme si c'était un type A, Nous obtenons toujours le comportement de B pour draw . Le comportement draw est polymorphe.

dans certaines langues, le polymorphisme et l'hérédité ne sont pas aussi proches concerner. En C++, par exemple, les fonctions non déclarées virtuelles sont héritées, mais ne seront pas envoyées dynamiquement, donc vous n'obtiendrez pas ce comportement polymorphique même si vous utilisez l'héritage.

en javascript, chaque appel de fonction est dynamiquement envoyé et vous avez un faible Dactylographie. Cela signifie que vous pourriez avoir un tas d'objets sans rapport, chacun avec leur propre draw , avoir une fonction iterate sur eux et appeler la fonction, et chacun se comporterait très bien. Vous auriez votre propre Tirage polymorphique sans avoir besoin d'héritage.

12
répondu ccoakley 2011-06-10 15:18:36

polymorphisme: Supposons que vous travaillez pour une entreprise qui vend des stylos. Donc vous faites une classe très agréable appelée "stylo" qui gère tout ce que vous devez savoir sur un stylo. Vous écrivez toutes sortes de classes pour la facturation, l'expédition, la création de factures, tous en utilisant la classe de stylo. Un jour, le patron vient et dit: "Bonne Nouvelle! L'entreprise est en pleine croissance et nous vendons des livres et des CD maintenant!"Pas de bonnes nouvelles parce que maintenant vous devez changer chaque classe qui utilise stylo pour utiliser aussi livre et CD. Mais que faire si vous avez eu à l'origine créé une interface appelée "SellableProduct", et Pen mis en œuvre cette interface. Alors vous auriez pu écrire toutes vos classes d'expédition, de facturation, etc pour utiliser cette interface au lieu de stylo. Maintenant, tout ce que vous auriez à faire est de créer une nouvelle classe appelée Book & CompactDisc qui implémente l'interface SellableProduct. En raison du polymorphisme, toutes les autres classes pourraient continuer à fonctionner sans changement! Un Sens?

donc, cela signifie utiliser L'héritage qui est un de la façon d'obtenir de polymorphisme.

Polymorhisme peut être possible dans une classe / interface mais héritage toujours entre 2 ou plusieurs classes / interfaces. L'hérédité est toujours conforme à la relation " est-a "alors qu'elle n'est pas toujours conforme au polymorphisme (qui peut être conforme à la fois à la relation" est-a "et à la relation" a-a").

10
répondu AmitK 2012-12-16 01:01:14

L'héritage est plus une chose statique (une classe en étend une autre) tandis que le polymorphisme est une chose dynamique/ runtime (un objet se comporte selon son type dynamique/ runtime et non pas selon son type statique/ déclaration).

E. G.

// This assignment is possible because B extends A
A a = new B();
// polymorphic call/ access
a.foo();

- > bien que le type statique/ déclaration de a soit A, le type dynamique/ temps d'exécution réel est B et donc A. foo() exécutera foo comme défini en B non en A.

6
répondu Puce 2011-06-10 15:08:16

polymorphisme est une approche pour exprimer le comportement commun entre les types d'objets qui ont des traits similaires. Elle permet également de créer des variations de ces traits par le biais de la primauté. L'hérédité est un moyen de réaliser le polymorphisme à travers une hiérarchie d'objets où les objets expriment des relations et des comportements abstraits. Mais ce n'est pas le seul moyen d'atteindre le polymorphisme. Le Prototype est une autre façon d'exprimer le polymorphisme qui est différent de l'héritage. JavaScript est un exemple d'un langage qui utilise un prototype. J'imagine que il y a d'autres façons aussi.

3
répondu laz 2011-06-10 15:08:15

héritage est un concept lié à la réutilisation de code. Par exemple, si j'ai une classe parent, dites Animal et qu'elle contient certains attributs et méthodes (pour cet exemple, dites makeNoise() et sleep() ) et que je crée deux classes d'enfants appelées Dog et Cat . Comme les chiens et les chats dorment de la même manière( je suppose), il n'est pas nécessaire d'ajouter plus de fonctionnalité à la méthode sleep() dans les sous-classes Dog et Cat fournies par la classe de parent Animal . Cependant, un Dog aboie et un Cat miaule donc bien que la classe Animal pourrait avoir une méthode pour faire un bruit, un chien et un chat font des bruits différents par rapport à l'autre et d'autres animaux. Il est donc nécessaire de redéfinir ce comportement pour leurs types spécifiques. Ainsi, la définition de polymorphisme. Espérons que cette aide.

3
répondu avenger12 2017-07-21 17:30:29

Oracle documentation a cité la différence précisément.

héritage: une classe hérite champs et méthodes de toutes ses superclasses, directes ou indirectes. une sous-classe peut remplacer des méthodes dont elle hérite, ou elle peut cacher des champs ou des méthodes dont elle hérite . (Notez que cacher des Champs est généralement une mauvaise pratique de programmation.)

polymorphisme: polymorphisme se réfère à un principe en biologie dans lequel un organisme ou une espèce peut avoir de nombreuses formes ou stades différents. Ce principe peut également s'appliquer à la programmation orientée objet et aux langages comme le langage Java. sous-classes d'une classe peuvent définir leurs propres comportements et pourtant, partagent les mêmes fonctionnalités de la classe parent.

polymorphisme ne s'applique pas aux champs.

Related post:

Polymorphisme vs Primordial vs Surcharge

3
répondu Ravindra babu 2017-09-25 10:02:35

héritage est lorsque la classe A hérite tous les nonstatiques protégé/méthodes publiques/champs de tous ses parents jusqu'à L'objet.

0
répondu Cosmin Cosmin 2011-06-10 15:07:56

si vous utilisez JAVA c'est aussi simple que ceci:

Le polymorphisme

utilise des méthodes héritées mais les" supplante " pour faire quelque chose de différent (ou la même chose si vous appelez super donc ne serait pas techniquement polymorphique).

corrigez-moi si je me trompe.

0
répondu Oliver Dixon 2015-01-06 00:03:03

le but principal de polymorphisme : pour créer la variable de référence de super classe et en tenant la sous-classe objet => un objet peut effectuer comportements multiples .

Dans héritage , sous-classe héritent des propriétés de super classe .

0
répondu satya 2016-11-07 17:03:03

héritage est une sorte de polymorphisme, exactement en fait héritage est le polymorphisme dynamique. Donc, quand vous retirez l'héritage vous ne pouvez plus outrepasser.

0
répondu Alireza Rahmani 2017-12-07 15:58:07

Polymorphisme est réalisé par Héritage dans Java .

public class Animal {}
public interface Herbivore {}
public interface Carnivore {}
public interface Pet {}

public class Hamster extends Animal implements Herbivore implements Pet () {}
public class Cat extends Animal implements Carnivore implements Pet () {}

Hamster classe hérite structure à partir de Animal , Herbivore et Pet exposer Polymorphe behaviorisme d'un animal domestique.

Cat catégorie héritages structure à partir de Animal , Carnivore et Pet pour pièce Polymorphe behaviorisme d'un animal domestique.

0
répondu nabster 2018-01-30 16:38:26