Java: une classe hérite de deux super-classes en même temps?
J'ai une classe de Voyage que je veux faire une super-classe et une autre classe plannedjourney.
Le plannedjourney classe extends JFrame, car il contient des formulaires..Mais je veux aussi que cette classe étend Voyage..
Est-il possible de faire cela?
pas de. il n'y a pas d'héritage multiple en java. Vérifier stackoverflow.com/questions/3621290/java-multiple-inheritance, stackoverflow.com/questions/1038314/..., stackoverflow.com/questions/3448864/...
Sous-classement à partir de composants Swing est rarement une bonne idée. Ces classes sont déjà très grande. Il est préférable d'utiliser la composition (votre classe auront référence à l'image).
un certain nombre de réponses en quelques secondes, ce qui vous aurait évité d'en regardant un peu plus dans le déjà existant questions (et réponses !) 🙂
L'extension de JFrame est presque toujours mal.
Sous-classement à partir de composants Swing est rarement une bonne idée. Ces classes sont déjà très grande. Il est préférable d'utiliser la composition (votre classe auront référence à l'image).
un certain nombre de réponses en quelques secondes, ce qui vous aurait évité d'en regardant un peu plus dans le déjà existant questions (et réponses !) 🙂
L'extension de JFrame est presque toujours mal.
OriginalL'auteur Vimal Basdeo | 2011-01-04
Vous devez vous connecter pour publier un commentaire.
Ne pas mélanger les modèles et les vues. Si vous gardez les deux domaines nettement séparés, alors vous ne serez pas dans le besoin de l'héritage multiple (cette fois).
Vous avez un modèle de classe pour les voyages et une visionneuse pour de tels voyages. Le spectateur doit sous-classe
Component
et être affiché (quelque part) dans votre fenêtre (unJFrame
exemple).Cette visionneuse prend un voyage d'objet et présente le voyage de ses propriétés.
Journey
seul dispose de toutes les informations au sujet d'un voyage, seul le spectateur sait à présent un voyage à l'utilisateur:Maintenant, vous pouvez créer une instance de PlannedJourney et l'ajouter à la des applications
JFrame
à la position appropriée.OriginalL'auteur Andreas_D
Pas d'héritage multiple en Java.
Il n'est pas permis par le langage. Vérifiez si vous pouvez changer votre conception de l'Interface à la place. (il est presque toujours possible).
Oui, c'est ce que je voulais dire, que parfois, même, si possible, il vaut mieux réfléchir à deux fois sur la conception et le changer au lieu de mettre en place quelque chose à l'envers.
OriginalL'auteur LudoMC
Non ce n'est pas possible en Java. Généralement, un effet similaire peut être obtenu en utilisant des interfaces (je suis en train de penser Voyage peut être une interface ici), mais si vous souhaitez hériter implémentations de méthodes, alors vous aurez à repenser la conception de votre.
Ma meilleure supposition à partir de votre description, c'est que vous pouvez séparer vos classes dans une hiérarchie qui représente le modèle de données, et un autre qui extends JFrame pour afficher les données.
OriginalL'auteur David Tang
De la Héritage page de la Sun Java Tutoriel
OriginalL'auteur Sean Patrick Floyd
Soit faire
Journey
étendreJFrame
ou faireJourney
une interface.Choisir l'option qui fait le plus de sens pour votre structure de l'objet.
Si elle fait sens pour
Journey
d'étendreJFrame
puis le faire. De cette façon, quandPlannedJourney
s'étendJourney
, il hérite également tout ce quiJourney
ne deJFrame
.Si ce n'est pas logique, puis faire
Journey
une interface, et ontPlannedJourney
mettre en œuvreJourney
.PlannedJourney
ne sera pas en mesure d'hériter de tout code deJourney
, mais vous serez en mesure d'hériter de signatures de méthode et de passer de l'objet autour deJourney
en plus comme unJFrame
.Assurez-vous que lorsque vous travaillez avec Swing que vous êtes en séparant la Modèle de la Vue. Vos données doivent être stockées dans un ensemble d'objets (Modèle), et les composants Swing pour l'affichage des données devrait être un jeu d'objets (Vue). Cela permet d'encapsuler les données de fonctions, de les séparer des objets graphiques, et d'appliquer une dépendance de l' Vue sur le Modèle. Considérer qu'un
Journey
objet devrait peut-être besoin d'unJourneyFrame
à afficher. De cette façon, leJourneyFrame
peut prendre soin de simplement les afficher et peut s'étendreJFrame
et de transporter seulement une référence àJourney
, ce qui peut avoir de sa propre hiérarchie.La première partie était de répondre à la question posée, "un classe hérite de deux super-classes en même temps?" Je pense qu'il est important de réellement répondre à la question. La deuxième partie est de la commune de conseils de bon sens à propos de l'exemple cité. Aussi, je ne souscris pas à la couverture des déclarations comme "favorable à la composition au cours de l'héritage." Je privilégie toujours ce qui a du sens sur ce qui ne fonctionne pas.
OriginalL'auteur Erick Robertson
Pas. Il n'y a pas d'héritage multiple en Java. C'était une volonté délibérée de décision de conception.
Si vous pouvez trouver un moyen d'exprimer l'un des super-classes comme une interface à la place, alors cela pourrait résoudre votre problème.
OriginalL'auteur Philip Potter
Je pense une meilleure façon peut-être d'avoir PlannedJourney prolonger le Voyage et puis ont PlannedJourney avoir une instance de JFrame. Il ressemble à un moyen de tuer deux oiseaux avec une pierre en fonction de comment vous l'avez vue.
OriginalL'auteur Norm
L'héritage Multiple en Java n'est pas possible.
Plusieurs implémentations d'interfaces est possible, c'est la chose la plus proche de l'héritage multiple en Java que vous avez.
Si possible, à la faveur de la composition au cours de l'héritage. Citation tirée Efficace Java.
OriginalL'auteur darioo
Si vous n'avez pas lu "Effective Java" par Joshua Bloch est maintenant le temps de le faire. En particulier la section "favoriser la composition au cours de l'héritage". Puisque vous ne pouvez pas faire de l'héritage multiple en Java, il explique pourquoi dans presque tous les cas, la bonne approche est d'avoir votre JFrame extension CONTIENNENT une référence à la PlannedJourney il est l'INTERFACE utilisateur pour.
OriginalL'auteur DJClayworth
Pas exactement sûr de ce que vous voulez, mais l'héritage multiple est très possible et fréquent en Java. Tout d'abord lorsqu'une classe hérite d'une autre classe, si cette classe est aussi une sous-classe d'une autre classe, il va passer sur héritées des méthodes de sous-classes. Deuxièmement, à l'intérieur de Java il y a une chaîne de codage autrement connue comme la "Interface", ce qui permet à une classe d'hériter de plusieurs classes sans extension d'une classe.
OriginalL'auteur programming major