J'ai un ... Comment allez-vous continuer à implémenter cela? p> personnes code> classe et étudiant code> et employé code> classes qui héritent d'elle. Mais si j'ai une personne qui est à la fois un étudiant code> code> et un employé code> ... p>
5 Réponses :
Puisque Java n'autorise pas plusieurs héritage, vous devez définir des interfaces pour étudiant code> et employé code> au lieu de hériter d'eux en tant que classes de base. P>
Ce que vous pouvez faire est, vous pouvez modifier le Vous devrez travailler comme ceci car en Java, une classe ne peut hériter que d'une classe au maximum.
Bravo. P> Employé de la classe public Code> vers Employé d'interface publique Code>, puis que vous puissiez faire L'étudiant de la classe publique étend aux gens implémente les employés < / code> p>
C'est un exemple classique d'un domaine problématique analysé de manière incorrecte. Oui, dans certaines situations, il peut être approprié de penser à "étudiant" comme type de "personne" et un "employé" comme type de "personne", mais - en fonction de votre domaine problématique - il ne peut pas non plus être approprié . p>
Si votre domaine exige que quelque chose soit à la fois un "étudiant" et un "employé", vous devez envisager si la relation entre "étudiant" et "personne" dans votre domaine "/ em> est vraiment un" est-une "relation. p>
Cela pourrait être que dans ce cas particulier, être un étudiant est simplement un attribut em> d'une personne particulière. John Doe est donc une personne qui peut également avoir une "occupation actuelle" de "étudiant". Dans ce cas, il peut avoir une liste de plusieurs «professions actuelles». Et la relation dans un tel monde devient "a-a-a" plutôt que "is-a". Donc, «étudiant» et «employé» deviennent des sous-classes de «occupation». P>
Je reçois le point, mais je n'ai pas compris comment résoudre ce problème. Merci
C'est un peu difficile de vous donner un exemple concret, sans savoir ce que vous avez demandé de mettre en œuvre dans votre entretien. Peut-être devriez-vous ajouter le texte complet de la question de l'entretien à votre question initiale.
en Java, il n'est possible que d'étendre une superclasse. Cependant, Java propose des interfaces et une classe peut prolonger plus d'une interface.
Vous pouvez organiser votre structure de classe comme ceci: p> alors que votre employeur peut être: < / p> dans le cas de La seule différence serait que l'étudiant et l'employé n'éloignaient pas les gens alors. p> p>
personnes code> est une classe qui ne peut pas être changée que vous pouvez faire: p>
Et si nous avons des cours de monde, cela ne peut pas changer
Selon le commentaire:
C'est une question d'entrevue, je pense que vous pouvez faire une hypothèse ici p> blockQquote>
Si tel est le cas, la seule réponse correcte est de décrire vos hypothèses et de la manière dont vous les adressez. p>
Si vous adhérez strictement aux exigences, vous pouvez faire
Étudiant code> etdes interfaces CODE> les interfaces et ont différentes classes les implémenter: p>Person person = new Person("John Doe", 21, Sex.Male); person.addRole(new Student("Stack Overflow University")); person.addRole(new Employee("Secret Government Spy"));
C'est la première fois que je vois la deuxième solution. Dans ce cas, comment pourrait instancier pour une personne qui sont étudiant et employé? Merci
@Sihanwang j'ai édité ma réponse avec un exemple de la façon dont cela peut être fait.
Si nous voulons avoir un étudiant, utiliserions-nous une fonction addrole de personne ou utilisez-vous simplement une classe d'étudiants?
@Sihanwang dans la deuxième mise en œuvre - vous auriez une personne code>, avec un seul étudiant code>. S'il s'agit d'une usecase commune, cela pourrait valoir la peine d'ajouter un constructeur avec un Set Paramètre en tant que sucre syntaxique: Nouvelle personne ("John DOE ", 21, SEX.MALE, COLLECTIONS.SINGLETON (nouvel étudiant (" NYU "))) Code> ou même Nouvelle personne (" John Doe ", 21, Sex.MAle, nouvel étudiant (" NYU "))) code>
C'est très beau design.
Je suis nouveau à Java, est-il désavantage pour la deuxième solution comparant avec le premier?
@Sihanwang Le problème principal, IMHO, est que vous n'avez pas de bon moyen de limiter les types de personnes que vous pouvez passer à la méthode. Par exemple, ce sera assez maladroit de créer une classe code> de classe code> qui détient une liste d'étudiants, alors que dans la première solution, vous pourriez disposer simplement de disposer de de classe (liste <étudiant>) code >. En fin de compte, à tous, se résume à quelles sont les exigences.
Je ne les ferais pas de cours. Alors, quel est le problème réel?
@Ordous pourquoi ne pas faire de cours?
@Sihanwang ce que exactement b> est le problème? Quelle fonctionnalité
étudiant code> etemployé code> doit avoir?Cela ressemble à un mauvais design, pouvez-vous expliquer ce que vous voulez faire?
@Murinik C'est une question d'entrevue, je pense que vous pouvez faire une hypothèse ici.
@Marcoacierno C'est une question d'entrevue, je pense que vous pouvez faire une hypothèse ici
Étant donné que Java ne prend pas en charge de multiples héritages, vous avez essentiellement trois options: a) repenser la conception que les concepts d'entreprise dans la mise en page de classe ne sont pas toujours un bon ajustement. b) Utilisez des interfaces, vous pouvez implémenter plusieurs. c) Utilisez la composition (ayant un personnage personnelfo et un terrain étudiantInfo)
Dupliqué possible de Héritage multiple Java