Si ma classe implements
possède une interface, puis-je dire que je suis l'héritage? Je sais que quand une classe une extends
autre classe, c'est l'héritage.
java
terminology
interfaces
inheritance
definition
RajeeV VenkaT
la source
la source
Réponses:
MISE À JOUR: J'ai révisé cette réponse. Un certain nombre de bons points ont été soulevés dans les commentaires qui méritaient d'être cités.
Il n'est pas tout à fait clair ce que vous entendez par "héritage suivant". Posons une question légèrement différente?
Ce sont subtilement différents. C'est malheureux car c'est déroutant.
La confusion peut survenir parce que les gens considèrent l'héritage comme un mécanisme de partage des détails de mise en œuvre. Bien qu'il est un tel mécanisme, ce mécanisme fonctionne en partageant les membres . Ces membres n'ont pas besoin d'implémentations! Comme nous le verrons, ils peuvent être abstraits.
Personnellement, je serais plus heureux si les spécifications Java et C # utilisaient un mot autre que "hérite" pour décrire la relation entre les méthodes d'interface et les classes, pour éviter cette confusion. Mais ils ne le font pas, et nous devons raisonner à partir des spécifications, pas contre eux.
Oui, certains le sont. Voir la section 8.4.8 des spécifications Java, que je cite ici pour votre commodité.
Si vous dites qu'une classe implémente une interface, la classe hérite des méthodes abstraites et par défaut de cette interface . (Bien sûr, j'ai omis les conditions qui suivent; voir la spécification pour plus de détails. En particulier, une classe qui implémente un membre d'une interface n'est pas considérée comme ayant hérité de ce membre. Encore une fois, est-ce déroutant? Oui.)
Typiquement, nous dirions qu'une classe implémente une interface. Comme indiqué ci-dessus, une classe peut hériter des membres d'une interface et pourtant ne pas être considérée comme héritant de l'interface. Ce qui prête à confusion, oui.
Généralement non. Ce type d'analyse étroite de la spécification est plus utile pour les rédacteurs de compilateurs que pour les développeurs métier. Il est plus important de comprendre quand utiliser une interface que d'obtenir une définition précise de "hérite de".
la source
java
, c'est donc la bonne réponse, à moins que l'OP ne signifiait autrejava
chose :-)L'héritage signifie l'écriture d'une nouvelle sous-classe pour une superclasse. Écrire une nouvelle classe sur une interface implémente cette interface. (Et l'écriture d'une nouvelle interface basée sur une ancienne étend cette interface.)
Le seul terme correct qui s'applique aux trois possibilités est le sous - typage . Tous les sous-types ne sont pas une sous-classe.
la source
Avec les sous - classes , vous
Avec les interfaces , vous remplissez un contrat en implémentant les méthodes déclarées.
C'est la façon classique de voir les choses. Maintenant, avec Java 8, les interfaces deviennent un mélange:
Est-ce que l'implémentation d'une interface dont toutes les méthodes ont des implémentations par défaut compterait toujours comme «implémenter», ou plutôt comme extension? Je ne pouvais pas le dire. Comme ce cas est assez farfelu (cela a en fait activé le multi-héritage sans état), j'utiliserais toujours «l'héritage» uniquement avec des sous-classes.
la source