Java n'autorise pas l'héritage multiple mais permet d'implémenter plusieurs interfaces. Pourquoi?
Réponses
Trop de publicités?L'un de mes instructeurs du collège il m'a expliqué de cette façon:
Supposons que j'ai une classe, qui est un grille-pain, et une autre classe, qui est NuclearBomb. Ils ont une "obscurité". Ils ont tous les deux une sur (). (On a une off " (éteint), l'autre n'a pas.) Si je veux créer une classe qui est une sous-classe de ces deux...comme vous pouvez le voir, c'est un problème qui pourrait vraiment m'exploser au visage ici.
Ainsi, l'un des principaux problèmes est que si vous avez deux classes parent, ils pourraient avoir des implémentations différentes de la même fonction - ou peut-être deux fonctions différentes avec le même nom, comme dans mon instructeur exemple. Ensuite, vous avez à traiter avec à décider lequel votre sous-classe va utiliser. Il y a des moyens de manutention, certes - C++ -, mais les concepteurs de Java estime que cela permettrait de rendre les choses trop compliquées.
Avec une interface, cependant, vous êtes en décrivant quelque chose de la classe est capable de faire, plutôt que d'emprunter une autre classe de la méthode de faire quelque chose. Plusieurs interfaces sont beaucoup moins susceptibles de causer un délicat les conflits doivent être résolus de plusieurs classes parentes.
Parce que l'héritage est utilisé de manière excessive, même si vous ne pouvez pas dire "hé, cette méthode semble utile, je vais également étendre cette classe".
public class MyGodClass extends AppDomainObject, HttpServlet, MouseAdapter,
AbstractTableModel, AbstractListModel, AbstractList, AbstractMap, ...
La mise en œuvre de plusieurs interfaces est très utile et ne cause pas de problèmes de langue maîtres d'œuvre, ni les programmeurs. Donc c'est autorisé. L'héritage Multiple, tout aussi utile, peut causer de graves problèmes pour les utilisateurs (redouté de diamant de la mort). Et la plupart des choses que vous faites avec l'héritage multiple peut être également effectué par la composition ou à l'aide de classes internes. Donc, l'héritage multiple est interdit d'apporter plus de problèmes que de gains.
Pour la même raison, C# ne permet pas l'héritage multiple, mais vous permet d'implémenter plusieurs interfaces.
La leçon de C++ w/ l'héritage multiple est qu'il entraîner plus de problèmes qu'elle n'en valait la peine.
Une interface est un contrat de choses que votre classe a à mettre en œuvre. Vous n'avez pas gain de toutes les fonctionnalités de l'interface. L'héritage permet d'hériter de la fonctionnalité d'un parent de la classe (et dans de multiples-l'héritage, qui peut être extrêmement déroutant).
Permettant de multiples interfaces vous permet d'utiliser des Modèles de Conception (comme Adaptateur) pour résoudre le même type de problèmes que vous pouvez résoudre en utilisant l'héritage multiple, mais en beaucoup plus fiable et prévisible.