Est-il possible d'avoir une classe ont plus d'une super-classe?
Je suis entrain de créer un très primitif jeu de blackjack pour mon lycée de programmation de classe à l'aide de Swing, par conséquent, toutes mes ressources des classes d'étendre un Composite. J'ai créé la ressource suivante classes:
- DealerBox
- ClubsBox
- SpadesBox
- HeartsBox
Mon problème est que je veux créer une poignée de public des entiers tels que j'ai
public int DealerTotal, ClubsTotal, SpadesTotal, HeartsTotal;
Je veux faire ce que je puisse suivre les valeurs de toutes les mains et de déterminer les gagnants et les perdants. J'ai eu une ampoule aller au large et de la pensée que de faire de la Dealerbox une super-classe pour les Clubs, les Piques, et le Cœur était la solution à tous mes problèmes que je pourrais avoir un code simple dans la superclasse obtention de valeurs pour les nombres entiers et faire la vérification dont j'ai besoin.
J'ai donc écrit ce qu'un de mes sous-classes:
public class ClubsBox extends JPanel, DealerBox implements Runnable
{
//fun code
}
Le problème maintenant est que je reçois un message d'erreur. J'ai supposé qu'il avait quelque chose à voir avec inscription ClubsBox comme étant la sous-classe de Composite ET DealerBox. J'ai donc stackoverflowed mon problème et trouvé une réponse qui a déclaré qu'on ne peut pas avoir une classe qui dispose de 2 super-classes. Une autre réponse à une question similaire a dit que l'on POUVAIT avoir une classe qui a deux super-classes.
Nous en arrivons maintenant à la question principale: Est-il possible d'avoir une classe qui a deux super-classes? Si oui, comment dois-je code? Si non, est-il un moyen de contourner la restriction?
EDIT: LE 21 AVRIL 2014, 44 MINUTES APRÈS LE POST ORIGINAL
J'ai un nouveau problème. J'ai utilisé la méthode que tout le monde a suggéré ce qui était à faire DealerBox étendre un Composite de tout le reste étendre DealerBox. Mon GUI passé de ceci:
:
En bas, on est clairement incroyablement foutu. En quelque sorte, des étiquettes à partir d'autres domaines fini par être copiés et les choses se sont mélangées autour. Si vous avez besoin du code laissez-moi savoir, mais j'ai besoin d'aide sérieuse de fixation.
Veuillez garder à l'esprit l'héritage de l'arbre ressemble à ceci:
A extends B
et puis B extends C
, mais pas de la manière dont vous l'avez écrit.Java supporte seul l'héritage de classe mais vous pouvez avoir zéro, une ou plusieurs interfaces qui sont mis en œuvre. Voir ce Oracle Java tutoriel sur l'héritage
Java ne comprennent pas l'héritage multiple en raison de la complexité qui peut se développer avec les hiérarchies de classe lors de l'utilisation de l'héritage multiple (voir Pourquoi il n'y a pas d'héritage multiple en Java). Je tiens également à souligner que l'héritage peut être sur-utilisé et, en général, la composition est préféré par rapport à l'héritage.
Vous tous les gars fourni une grande aide, et a donné fondamentalement les mêmes réponses, donc je vous remercie tous beaucoup.
J'ai essayé de deviner ce qui pourrait être la question avec votre nouvelle 2ème édition - si elle n'est pas résolu, alors s'il vous plaît envisager de faire une nouvelle question qui peut aller plus en profondeur dans la mise en page, avec un peu de code collé dans.
OriginalL'auteur Ungeheuer | 2014-04-21
Vous devez vous connecter pour publier un commentaire.
Quand le Soleil était de la conception de Java, il omis de l'héritage multiple, ou plus précisément de multiples de mise en œuvre de l'héritage - sur le but. Pourtant, l'héritage multiple peut être utile, en particulier lorsque le potentiel ancêtres d'une classe ont orthogonale préoccupations. Cet article présente une classe utilitaire qui permet non seulement de l'héritage multiple pour être simulé, mais aussi a d'autres profondes applications.
Avez-vous jamais trouvé vous-même vouloir écrire quelque chose de similaire à:
Ici, Personne est une classe concrète qui représente une personne, alors que l'Emploi est une autre classe qui représente les coordonnées d'une personne qui est employée. Si seulement vous pouviez les mettre ensemble, vous avez tout le nécessaire pour définir et mettre en œuvre un Employé de la classe. Sauf en Java - vous ne pouvez pas. Héritant de la mise en œuvre de plus d'une super-classe - multiple de mise en œuvre de l'héritage, n'est pas une caractéristique de la langue. Java permet à une classe d'avoir une seule super-classe et pas plus.
Pour de plus amples informations, lisez http://www2.sys-con.com/itsg/virtualcd/java/archives/0810/haywood/index.html
Une option pour vous, c'est "l'Héritage de l'Héritage":
Acclamations.
merci pour l'astuce, j'ai oublié de renvoyer l'auteur
OriginalL'auteur Victor R. Oliveira
Malheureusement, vous ne pouvez pas avoir plus d'une super-classe directe en Java. Mais vous pouvez la chaîne d'ensemble comme ceci:
Maintenant avec le nouveau numéro de votre composants n'étant pas disposés de la même manière qu'ils l'étaient avant, c'est trop dur de deviner ce qu'il se passe sans voir un peu de code. Êtes-vous de mettre le code commun dans le constructeur pour
DealerBox
, et l'appeler à partir de chaqueDealerBox
sous-classe? Comme:OriginalL'auteur SimonT
L'héritage Multiple n'est pas autorisé en Java. Si vous ne pouvez pas avoir deux super-classes.
Le moyen de contourner cela aurait ClubsBox étendre seulement DealerBox et puis DealerBox elle-même s'étend Composite.
ClubsBox:
DealerBox:
OriginalL'auteur isak gilbert
Classes en Java ne peut étendre une classe, votre train de s'étendre à deux. Ils peuvent; cependant, l'implémentation de plusieurs
interfaces
.Vous pouvez avoir l'héritage multiple, cependant, quelque chose comme ceci:
et ainsi de suite et ainsi de suite, cela vous aide?
OriginalL'auteur werkn
Pas de Java ne permet pas d'avoir plus d'une Super-classe ou d'hériter de plus d'une classe Parent. Ce concept est appelé comme l'héritage multiple.La raison est derrière le diamant problème pour en savoir plus à propos de l'héritage multiple et de Diamants problème, vérifiez: https://www.geeksforgeeks.org/java-and-multiple-inheritance/
OriginalL'auteur rahul uday