2010-08-09 7 views

Répondre

1

En général, l'héritage multiple crée plus de problèmes qu'il n'en résout. Réfléchissez à la façon dont les appels de méthode virtuelle doivent être résolus. Que faire si une classe ne définit pas une méthode mais que ses deux parents le font? Lequel devrait exécuter? Cependant, la mise en œuvre de plusieurs interfaces ne pose pas de problèmes de ce type. Si deux interfaces définissent la même méthode et que vous essayez réellement de les implémenter, votre code ne compilera même pas (même si je ne suis pas certain que vous puissiez les implémenter explicitement et satisfaire aux exigences du compilateur).

+0

Vous pouvez les définir explicitement à la fois –

+0

Il ne devrait pas y avoir d'erreur de compilation lors de l'implémentation d'une méthode que les deux interfaces définissent. – Dienekes

0

Le danger avec l'héritage multiple des classes concrètes est qu'il y a une recherche de stockage et de méthode virtuelle qui doit être réconciliée entre les deux parents ou plus d'une classe donnée. C'est particulièrement difficile quand il y a des ancêtres partagés. Mais les interfaces définissent seulement ce à quoi une classe devrait ressembler, pas comment elle doit être implémentée et il est beaucoup plus facile de faire ressembler une classe à beaucoup de choses différentes que de la faire être beaucoup de choses différentes. Deux interfaces peuvent nécessiter une méthode int Foo() et une classe d'implémentation peut utiliser en toute sécurité les deux interfaces et implémenter Foo() sans causer de maux de tête pour lesquels Foo() surcharger, etc

Une autre raison est que le chaînage du constructeur est difficile gérer avec plusieurs héritages. Mais les interfaces ne spécifient pas les constructeurs, de sorte que le problème est entièrement évité.

Il existe certainement de nombreuses autres raisons pour lesquelles l'héritage multiple est mauvais.

4

Vous pouvez simuler l'héritage multiple à l'aide d'interfaces. Si plusieurs héritages avec des classes étaient autorisés, cela mènerait au Diamond problem. Pour des raisons
héritage multiple est pas pris en charge, je vous suggère de lire Why doesn't C# support multiple inheritance?

langues différentes ont en fait des attentes différentes sur la façon dont MI fonctionne. Par exemple, comment les conflits sont résolus et si les bases dupliquées sont fusionnées ou redondantes. Avant que nous puissions mettre en œuvre MI dans le CLR, nous devons faire un aperçu de toutes les langues, figure sur les concepts communs, et décider comment les exprimer d'une manière langage neutre. Nous aurions aussi besoin de décider si MI appartient le CLS et ce que cela signifierait pour langues qui ne veulent pas ce concept (vraisemblablement VB.NET, par exemple). De cours, c'est l'affaire que nous sommes dans comme un langage commun, mais nous n'avons pas encore eu le temps de le faire pour MI .

Le nombre d'endroits où MI est vraiment est en fait assez faible. Dans de nombreux cas, l'héritage de plusieurs interface peut effectuer le travail à la place. Dans d'autres cas, vous pouvez utiliser l'encapsulation et la délégation . Si nous devions ajouter un construction légèrement différente, comme mixins, cela serait-il réellement plus puissant que ?

L'implémentation multiple injecte beaucoup de complexité dans l'implémentation . Cette complexité impacts casting, mise en page, expédition, accès au champ, sérialisation, identité comparaisons, vérifiabilité, réflexion, génériques, et probablement beaucoup d'autres endroits.

1

Parce que les interfaces ne connaissent pas les détails de mise en œuvre , ils ne ce que les opérations d'un objet peut faire. L'héritage multiple est difficile lorsque il existe deux implémentations différentes sont trouvées pour la méthode avec la même signature dans les deux classes de base . Mais dans le cas de l'interface à la fois l'interface peut définir une méthode commune avec la même signature mais ils ne sont pas mises en œuvre au niveau l'interface , ils ne sont mis en œuvre par l'objet ou le type qui mettent en œuvre les deux les interfaces. Ici deux interfaces différentes définissant deux méthodes avec les mêmes signatures, l'objet fournit l'implémentation commune satisfaisant à la fois les méthodes dans les deux interfaces. Alors il n'y a pas d'ambiguïté entre implémentations, les deux méthodes ont mise en œuvre commune où vous pourriez avoir l'héritage multiple en cas de interfaces.

0
java supports syntactical multiple inheritance....java does not supports implementation of multiple inheritance... 

some people says java supports multiple inheritance through interfaces ...but its not correct here the explanation: 

inheritance :: 

getting the properties from one class object to another class object.. 

Class A{} 

Class B extends A {} 

here object of class A getting the properties(methods/functions/ & data members/class variables) 

why java does not supports multiple inheritance using classes: 

Class A{} Class B{} Class C extends A,B{} X--this statement causes error because Class A getting object of object class from both sides A and B... 

every java class by default extending Object of object class...and Object of object class is the root object means super class for all classes... 

but here Class c having two super classes of object...so giving error...means java does not support multiple inheritance by using classes.. 

is java supports multiple inheritance using Interfaces:: 

because of this interface concept only few of us saying that java supports multiple inheritance....but its wrong.. 

here the explanation:: 

interface A{} 

interface B{} 

interface C implements A , B{} 

(or) interface A{} 

interface B{} 

Class C implements A , B{} 

here its look like multiple inheritance but ..... 

inheritance means getting the properties from one class object to another class object.. 

here in interface concept we are not at all getting any properties rather we are implementing the unimplemented methods of interface in class... 

so inheritance and intefaces are quite opposite... 

so finally java supports only syntax of multiple inheritance does not supports implementation of multiple inheritance.... 

inheritance is like debit and interface is like credit....but interface has its own importance in other concepts like server side programming... 
2

oui héritage signifie obtenir les propriétés d'un objet de classe à un autre objet de classe ..

ici dans le concept d'interface, nous ne sommes pas du tout obtenions des propriétés plutôt que nous mettons en œuvre les méthodes inappliquées de l'interface en classe ...

si l'héritage et Intefaces sont tout à fait en face ...

donc finalement java ne supporte que la syntaxe de l'héritage multiple ne pas prend en charge i XECUTION de l'héritage multiple ....

héritage

est comme débit et l'interface est comme crédit .... mais l'interface a sa propre importance dans d'autres concepts tels que la programmation côté serveur ...