Quelle est la différence entre 'extends' et 'implements' dans TypeScript
Je voudrais savoir ce que homme et enfant ont en commun et en quoi ils diffèrent.
class Person {
name: string;
age: number;
}
class child extends Person {}
class man implements Person {}
source d'informationauteur davejoem
Vous devez vous connecter pour publier un commentaire.
Version courte
extends
signifie:La nouvelle classe est un enfant. Il obtient les avantages de l'héritage. Il a toutes les propriétés, les méthodes que son parent. Il peut remplacer certains de ces et de mettre en œuvre de nouvelles, mais le parent truc est déjà inclus.
implements
signifie:La nouvelle classe peuvent être traités comme des la même "forme"tandis que il n'est pas un enfant. Il peut être transmis à un mode où le
Person
est nécessaire, indépendamment du fait divers, le parent quePerson
Plus ...
Dans La programmation orientée objet (langages tels que C#, Java) nous utilisons
extends
de tirer profit de l'héritage (voir wiki). Petite cite:implements
sera plus pour le polymorphisme (voir wiki). Petite cite:Donc, nous pouvons avoir vraiment différente de l'arbre de l'héritage de nos
class Man
.mais si nous déclarons aussi que nous pouvons faire semblant d'être un autre type de
Person
:.. alors on peut l'utiliser n'importe où, où l'
Person
est nécessaire. Nous avons juste à remplir les Personnes de"interface"
(c'est à dire de mettre en œuvre tous ses publics trucs).implement
autre classe? C'est vraiment des trucs coolJavascript nice face (l'un des avantages) est la prise en charge intégrée de la Duck-typing (voir wiki). Petite cite:
Donc, en Javascript, si deux objets différents... aurait une méthode similaire (par exemple
render()
) ils peuvent être transmis à une fonction qui attend que ça:Pour ne pas perdre que nous pouvons en caractères d'imprimerie fait de même avec la plus typée de soutien. Et c'est là que
a son rôle, où il fait sens
En POO langues comme
C#
... pas moyen de le faire...Également La documentation de l'aide ici:
Ainsi, alors que
extends
signifie - il obtient tout de son parentimplements
dans ce cas est presque comme la mise en oeuvre d'une interface. Objet enfant peut prétendre que c'est parent... mais il ne reçoit pas de la mise en œuvreÀ la machine (et quelques autres langages à objets) vous avez les classes et les interfaces.
Une interface n'a pas de mise en œuvre, c'est juste un "contrat" de ce que les membres/méthode de ce type a.
Par exemple:
Instances qui mettent en œuvre cette
Point
interface doit avoir deux membres du numéro de type:x
ety
et une méthodedistance
qui reçoit un autrePoint
instance et renvoie unnumber
.L'interface n'est pas de mettre en œuvre l'un de ceux-ci.
Classes sont les implémentations:
(code dans l'aire de jeux)
Dans votre exemple vous traiter votre
Person
classe comme une classe à l'étendre et à la fois comme une interface lorsque vous la mettre en œuvre.Votre code:
A une erreur de compilation en disant:
Et c'est parce que les interfaces de l'absence de mise en œuvre.
Donc, si vous
implement
une classe alors de ne prendre que son "contrat" sans la mise en œuvre, de sorte que vous aurez besoin pour ce faire:(code dans l'aire de jeux)
Ligne de fond est que, dans la plupart des cas, vous voulez
extend
une autre classe et de ne pasimplement
.Grande Réponse de @nitzan-tomer! M'a beaucoup aidé... j'ai étendu sa démonstration un peu avec:
Et comment ils se comportent dans les fonctions attend à une IPoint type.
Donc ce que j'ai appris jusqu'à présent et utilisé comme un pouce règle: si vous êtes à l'aide de classes et de méthodes attend types génériques, l'utilisation des interfaces que l'on en attend types. Et assurez-vous que le parent ou de la classe de base utilise cette interface. De cette façon, vous pouvez utiliser toutes les sous-classes dans ceux aussi loin qu'ils implémentent l'interface.
Hier le étendue de démonstration