2010-06-09 7 views

Répondre

11

L'héritage multiple des classes concrètes augmente a variety of issues. Par exemple, que se passe-t-il si une classe hérite de deux implémentations différentes de la même méthode à partir de deux classes de base différentes?

Pour éviter ces problèmes, Java ne prend pas en charge cette fonctionnalité.
Contrairement aux classes concrètes, les interfaces ne peuvent pas avoir de corps de méthode.

Par conséquent, aucun de ces problèmes ne s'applique aux interfaces.

+0

Pourquoi était-ce downvoted? – SLaks

+1

Vous voulez ajouter que ces problèmes peuvent être résolus (comme dans de nombreuses autres langues), c'est juste que cela ne sert à rien. –

0

Je n'aime vraiment pas le terme "hériter" ici, cela conduit à beaucoup de confusion. Java autorise uniquement les interfaces à étendre d'autres interfaces et les classes à implémenter des interfaces.

Si vous considérez une interface comme un ensemble mathématique de déclarations, chaque "extends" fournit simplement l'union de l'ensemble de la superinterface et celle de l'interface courante. Vous êtes donc autorisé à faire plusieurs "unions".

Lorsque vous arrivez finalement à une classe qui implémente une ou plusieurs interfaces, la sémantique ici est simplement que la classe doit fournir des implémentations pour toutes les méthodes de l'ensemble. Une classe implémentant plusieurs interfaces pourrait être réécrite en tant que classe implémentant une interface unique qui étend toutes les interfaces ci-dessus.

Dans le cas de classes héritant de plusieurs classes, cela n'est pas autorisé car cela conduit à une variété de problèmes, y compris le problème du diamant. Par exemple, si j'ai deux supertypes avec des implémentations différentes de la même signature de méthode, lequel devrait être utilisé dans le sous-type?

0

Pour rendre le langage plus simple et plus élégant. C++ permet beaucoup de choses, mais c'est souvent difficile à apprendre et à utiliser. Nous (moi, au moins :)) ne voulons pas que java soit comme ça. Parce que l'implémentation d'une interface n'est pas l'héritage, car

1

Cela signifie simplement que votre classe adhérera à un contrat prédéfini, généralement pour fournir un ensemble de méthodes liées à une certaine fonctionnalité. Toute classe peut adhérer à de nombreux contrats sans conflit (sauf si deux de ces interfaces définissent la même méthode). Contrairement à l'héritage, il ne reçoit pas automatiquement les attributs ou les fonctionnalités en raison d'une relation hiérarchique avec sa superclasse, car aucune relation de ce type n'existe.

L'héritage multiple n'est fondamentalement pas autorisé dans Java ou dans de nombreuses autres langues OO en raison du problème d'héritage Diamond déjà mentionné.

Questions connexes