Ne les sous-classes héritent des interfaces?
Petite question, je suis en train d'apprendre sur les interfaces et l'héritage.
Ce n'est pas de code, juste un exemple. Disons que j'ai la classe abstraite Animal.
Il y a un héritage, avec des groupes comme les chevaux, et les canines. Il y a également une interface "Animaux de compagnie". Il va être utilisé sur différentes sous-classes d'Animaux. La sous-classe du chien "Chien" implémente l'interface "Animaux de compagnie". Par conséquent, toutes les sous-classes de "Chien" également implémenter l'interface "Animal de compagnie", sans avoir à titre individuel, de mettre en œuvre des "Animaux de compagnie" sur chaque sous-classe de "Chien", à droite?
- Vous pouvez essayer et voir...
- vous devriez essayer et venir ici pour demander "pourquoi"..
- ce que les membres ci-dessus sont en train de dire, c'est que c'est quelque chose que vous pouvez facilement découvrir en écrivant simplement un petit programme, l'exécution et l'étude de la sortie. Si quelque chose n'est pas clair, il convient d'ouvrir une SORTE de question. L'une des règles fondamentales de cette communauté est de la recherche d'abord, demandez plus tard. Je suis bien sûr heureux de vous aider dans les deux cas, mais vous devez garder à l'esprit.
- Ok. Il est juste confus parfois.
- Ou munchschair pouvez poser la question à des experts, sur un site créé pour cela.
- Demander c'est une partie de la recherche. Cette question est très bonne. Personne ne vous oblige à y répondre si vous ne voulez pas. En posant cette question ici, munchschair obtient non seulement la réponse beaucoup plus rapidement que par l'expérimentation, mais il m'aide aussi à trouver la réponse avec le moderne Oracle.
- Je vous renvoie aux directives de la communauté.
- Il y a toujours un tas de gens ennuyeux sur ce site qui n'est pas de répondre à des questions, et, au lieu de dire aux gens de ne pas leur demander. Les gars, regardez combien d'espace de votre ridicule commentaires a pris. Si vous n'avez rien à contribuer, merci de rester HORS de ce site. munchschair, vous êtes à la question était très bon et il n'y a rien de mal avec elle. Je vous remercie pour votre contribution! Ce post m'a aidé à comprendre la sortie du programme que j'ai écrit.
Vous devez vous connecter pour publier un commentaire.
Si vous avez:
où
puis toutes les classes de l'extension de StaffMember héritera du type MyInterface, et vous serez en mesure de se référer à eux par ce type de base dans d'autres parties du code où un MyInterface instance est prévue comme un opérande/argument, par exemple:
La mise en œuvre effective de l'interface MyInterface peuvent avoir lieu soit dans la classe abstraite, ou dans l'une des classes de l'extension de la classe abstraite. L'important, c'est simplement que, dans ce cas, que myMethod() est spécifié quelque part dans la hiérarchie d'héritage, de sorte que la JVM peut trouver une définition de l'invoquer.
Pets
. Les méthodes que vous déclarez dansPets
devra ensuite être mis en œuvre dansDog
, depuis Chien (je suppose à partir de votre exemple) n'est pas abstrait. Si vous voulez d'autres Animaux de compagnie Chiens, tels que le Berger ou d'un Chihuahua à se comporter différemment que les Chiens comme Animaux de compagnie, alors vous pouvez simplement remplacer ces méthodes dans chacun des le Berger et le Chihuahua classes. Ils sont encorePets
cependant, peu importe ce que vous faites.Pas.
Une interface définit comment une classe devrait ressembler (au minimum). Si vous l'implémenter dans une classe de base ou le plus bas de la sous-classe n'a pas d'importance.
L'interface doit être entièrement mis en œuvre tout au long de la hiérarchie des sous-classes et les classes de base et doit être défini au niveau où l'interface de mise en œuvre de signature est situé (
implements Interface
).Les sous-classes d'eux-mêmes n'ont aucune connaissance au sujet de l'interface, mais ils ont la connexion implicite grâce à leur classe de base.
Parce que je suis quelqu'un de gentil:
}
De sortie:
Comme vous pouvez le voir, il montre que la
test()
(qui est à l'œuvre dansSubClass
) ne renvoie pas les interfaces mises en œuvre, tandis quetest2()
(qui est à l'œuvre dansBaseClass
) ne montrent qu'une interface est implémentée par la classe. Les classes abstraites peuvent permettre de mettre en œuvre les méthodes d'une interface ils mettre en œuvre pour être mis en œuvre dans les sous-catégories par marquage à la définitionabstract
.Et comme vous pouvez le voir dans la
main
méthode, à la fois la définition de l'objet commeBaseClass
ouSomeInterface
travaille et ne fait aucune différence.