Veuillez expliquer dans une langue facile à comprendre ou un lien vers un article.
java
inheritance
interface
extends
implements
Saad Masood
la source
la source
Réponses:
extends
est pour étendre une classe.implements
est pour implémenter une interfaceLa différence entre une interface et une classe régulière est que dans une interface, vous ne pouvez implémenter aucune des méthodes déclarées. Seule la classe qui "implémente" l'interface peut implémenter les méthodes. L'équivalent C ++ d'une interface serait une classe abstraite (pas exactement la même mais à peu près).
De plus, java ne prend pas en charge l' héritage multiple pour les classes. Ceci est résolu en utilisant plusieurs interfaces.
étendre maintenant une classe
dans ce cas
Je vous suggère de faire plus de recherche sur la liaison dynamique, le polymorphisme et en général l'héritage dans la programmation orientée objet
la source
default
comportement des méthodes dans les interfaces, rendant l'implémentation personnalisée de ces méthodes facultative. Par conséquent, la déclaration «vous pouvez uniquement spécifier des méthodes, mais pas les implémenter» n'est entièrement correcte que pour Java 7 et les versions antérieures .public interface ListIterator<E> extends Iterator<E>
Je remarque que vous avez des questions C ++ dans votre profil. Si vous comprenez le concept d' héritage multiple de C ++ (faisant référence aux classes qui héritent des caractéristiques de plusieurs autres classes), Java ne permet pas cela, mais il a un mot-clé
interface
, qui est un peu comme une classe virtuelle pure en C ++. Comme mentionné par beaucoup de gens, vousextend
une classe (et vous ne pouvez étendre qu'une seule), et vousimplement
une interface - mais votre classe peut implémenter autant d'interfaces que vous le souhaitez.C'est-à-dire que ces mots clés et les règles régissant leur utilisation délimitent les possibilités d'héritage multiple en Java (vous ne pouvez avoir qu'une seule super classe, mais vous pouvez implémenter plusieurs interfaces).
la source
En général , les outils utilisés pour la mise en œuvre d' une interface de et Prolonge utilisés pour l' extension du comportement de la classe de base ou abstraite classe.
étend : une classe dérivée peut étendre une classe de base. Vous pouvez redéfinir le comportement d'une relation établie. La classe dérivée " est un " type de classe de base
met en œuvre : Vous exécutez un contrat. La classe implémentant l'interface " a " une capacité.
Avec la version java 8, l'interface peut avoir des méthodes par défaut dans l'interface, qui fournit une implémentation dans l'interface elle-même.
Reportez-vous à cette question pour savoir quand utiliser chacun d'eux:
Interface vs classe abstraite (OO général)
Exemple pour comprendre les choses.
production:
Points importants à comprendre:
remember
() etprotectOwner
() par le partagename,lifeExpentency
deAnimal
Cat
etDog
mises en œuvre par cette capacité.Think,Learn,Apply,Climb
En parcourant ces exemples, vous pouvez comprendre que
Les classes non liées peuvent avoir des capacités via l'interface, mais les classes liées remplacent le comportement par l'extension des classes de base.
la source
extends
est pour quand vous héritez d'une classe de base (c'est-à-dire l'extension de ses fonctionnalités).implements
est pour quand vous implémentez une interface .Voici un bon point de départ: Interfaces et héritage .
la source
Un
class
ne peut que «mettre en œuvre» uninterface
. Une classe "étend" seulement aclass
. De même, uninterface
peut prolonger un autreinterface
.A
class
ne peut se prolonger qu’un autreclass
. Aclass
peut mettre en œuvre plusieursinterface
art.Si au contraire, vous êtes plus intéressé à savoir quand utiliser
abstract class
es etinterface
s, reportez-vous à ce fil: Interface vs classe abstraite (OO général)la source
class
ne peut en implémenter qu'uninterface
. Aclass
peut étendre plusieurs autres classes. Je crois que vous avez obtenu cela en arrière.Une interface est une description des actions qu'un objet peut effectuer ... par exemple, lorsque vous actionnez un interrupteur d'éclairage, la lumière s'allume, vous ne vous souciez pas de la façon dont elle fonctionne. Dans la programmation orientée objet, une interface est une description de toutes les fonctions qu'un objet doit avoir pour être un "X". Encore une fois, à titre d'exemple, tout ce qui "ACTE COMME" une lumière, devrait avoir une méthode turn_on () et une méthode turn_off (). Le but des interfaces est de permettre à l'ordinateur d'appliquer ces propriétés et de savoir qu'un objet de TYPE T (quelle que soit l'interface) doit avoir des fonctions appelées X, Y, Z, etc.
Une interface est une structure / syntaxe de programmation qui permet à l'ordinateur d'appliquer certaines propriétés à un objet (classe). Par exemple, disons que nous avons une classe de voiture et une classe de scooter et une classe de camion. Chacune de ces trois classes doit avoir une action start_engine (). La façon dont le "moteur est démarré" pour chaque véhicule est laissée à chaque classe particulière, mais le fait qu'ils doivent avoir une action start_engine est le domaine de l' interface .
la source
Comme le montre la figure ci-dessous, une classe étend une autre classe, une interface étend une autre interface mais une classe implémente une interface.
Pour plus de détails
la source
Étend : Ceci est utilisé pour obtenir les attributs d'une classe parent dans la classe de base et peut contenir des méthodes déjà définies qui peuvent être remplacées dans la classe enfant.
Implements : Ceci est utilisé pour implémenter une interface (classe parent avec des signatures de fonctions uniquement mais pas leurs définitions) en la définissant dans la classe enfant.
Il y a une condition spéciale: "Et si je veux qu'une nouvelle interface soit l'enfant d'une interface existante?". Dans la condition ci-dessus, l'interface enfant étend l'interface parent.
la source
A étend B:
A et B sont les deux classes ou les deux interfaces
A implémente B
A est une classe et B est une interface
Le cas restant où A est une interface et B une classe n'est pas légal en Java.
la source
Implements est utilisé pour les interfaces et extend est utilisé pour étendre une classe.
Pour le rendre plus clair en termes plus faciles, une interface est comme son son - une interface - un modèle, que vous devez appliquer, suivre, ainsi que vos idées.
Étendre est utilisé pour les classes, ici, vous étendez quelque chose qui existe déjà en y ajoutant plus de fonctionnalités.
Quelques notes supplémentaires:
une interface peut étendre une autre interface.
Et lorsque vous devez choisir entre implémenter une interface ou étendre une classe pour un scénario particulier, optez pour l'implémentation d'une interface. Parce qu'une classe peut implémenter plusieurs interfaces mais étendre une seule classe.
la source
Les deux mots clés sont utilisés lors de la création de votre propre nouvelle classe dans le langage Java.
Différence:
implements
signifie que vous utilisez les éléments d'une interface Java dans votre classe.extends
signifie que vous créez une sous-classe de la classe de base que vous étendez. Vous ne pouvez étendre qu'une seule classe dans votre classe enfant, mais vous pouvez implémenter autant d'interfaces que vous le souhaitez.Reportez-vous à la page de documentation d'Oracle sur l' interface pour plus de détails.
Cela peut aider à clarifier ce qu'est une interface et les conventions relatives à leur utilisation.
la source
Lorsqu'une sous-classe étend une classe, elle permet à la sous-classe d'hériter (réutiliser) et de remplacer le code défini dans le supertype. Lorsqu'une classe implémente une interface, elle permet à un objet créé à partir de la classe d'être utilisé dans n'importe quel contexte qui attend une valeur de l'interface.
Le vrai problème ici, c'est que si nous mettons en œuvre quelque chose, cela signifie simplement que nous utilisons ces méthodes telles quelles. Il n'y a aucune possibilité de changement dans leurs valeurs et types de retour.
Mais lorsque nous étendons quelque chose, cela devient une extension de votre classe. Vous pouvez le changer, l'utiliser, le réutiliser et il n'a pas nécessairement besoin de renvoyer les mêmes valeurs que dans la superclasse.
la source
Nous utilisons SubClass étend SuperClass uniquement lorsque la sous-classe souhaite utiliser certaines fonctionnalités (méthodes ou variables d'instance) qui sont déjà déclarées dans la SuperClass , ou si je souhaite modifier légèrement les fonctionnalités de la SuperClass (méthode prioritaire). Mais disons, par exemple, j'ai une classe Animal ( SuperClass ) et une classe Dog ( SubClass ) et il y a peu de méthodes que j'ai définies dans la classe Animal par exemple. doEat (); , doSleep (); ... et beaucoup plus.
Maintenant, ma classe Dog peut simplement étendre la classe Animal, si je veux que mon chien utilise l'une des méthodes déclarées dans la classe Animal, je peux invoquer ces méthodes en créant simplement un objet Dog. Ainsi, je peux garantir que j'ai un chien qui peut manger et dormir et faire tout ce que je veux que le chien fasse.
Maintenant, imaginez, un jour un amoureux des chats entre dans notre espace de travail et elle essaie d'étendre la classe animale (les chats mangent et dorment aussi). Elle crée un objet Cat et commence à invoquer les méthodes.
Mais, disons, quelqu'un essaie de fabriquer un objet de la classe Animal. Vous pouvez dire comment un chat dort, vous pouvez savoir comment un chien mange, vous pouvez savoir comment un éléphant boit. Mais cela n'a aucun sens de faire un objet de la classe Animal. Parce que c'est un modèle et nous ne voulons pas de façon générale de manger.
Donc, à la place, je préfère créer une classe abstraite que personne ne peut instancier mais qui peut être utilisée comme modèle pour d'autres classes.
Donc pour conclure, Interface n'est rien d'autre qu'une classe abstraite (une pure classe abstraite) qui ne contient aucune implémentation de méthode mais seulement les définitions (les modèles). Donc, quiconque implémente l'interface sait juste qu'il a les modèles de doEat (); et doSleep (); mais ils doivent définir leur propre doEat (); et doSleep (); selon leurs besoins.
Vous étendez uniquement lorsque vous souhaitez réutiliser une partie de la SuperClass (mais gardez à l'esprit, vous pouvez toujours remplacer les méthodes de votre SuperClass en fonction de vos besoins) et vous implémentez quand vous voulez les modèles et que vous souhaitez les définir vous-même (selon vos besoins).
Je vais partager avec vous un morceau de code: vous l'essayez avec différents ensembles d'entrées et regardez les résultats.
Interfaces définies :
la source
Dans les termes les plus simples, extend est utilisé pour hériter d'une classe et implements est utilisé pour appliquer une interface dans votre classe
étend :
met en œuvre :
si vous avez encore de la confusion, lisez ceci: https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html https://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html
la source
Les classes et les interfaces sont deux contrats . Ils fournissent des méthodes et des propriétés sur lesquelles s'appuient d'autres parties d'une application.
Vous définissez une interface lorsque vous n'êtes pas intéressé par les détails de mise en œuvre de ce contrat. La seule chose à prendre en compte est que le contrat (l'interface) existe.
Dans ce cas, vous laissez le soin à la classe qui implémente l'interface de se soucier des détails de l' exécution du contrat. Seules les classes peuvent implémenter des interfaces.
extend est utilisé lorsque vous souhaitez remplacer les détails d'un contrat existant. De cette façon, vous remplacez une façon d'exécuter un contrat d'une manière différente. Les classes peuvent étendre d'autres classes et les interfaces peuvent étendre d'autres interfaces.
la source
Extends
est utilisé lorsque vous voulez des attributs de la classe / interface parent dans votre classe / interface enfant etimplements
est utilisé lorsque vous voulez des attributs d'une interface dans votre classe.Exemple:
Étend en utilisant la classe
parent de classe {
}
classe Child étend Parent {
}
S'étend en utilisant l'interface
interface Parent {
}
interface enfant étend parent {
}
Met en oeuvre
interface A {
}
la classe B implémente A {
}
Combinaison de rallonges et d'outils
la source
étend
met en oeuvre
les classes abstraites agissent également comme des classes, avec des extensions et des implémentations
la source
Ces deux mots clés sont directement liés à l'héritage, c'est un concept central de la POO. Lorsque nous héritons d'une classe vers une autre classe, nous pouvons utiliser des extensions, mais lorsque nous allons hériter de certaines interfaces de notre classe, nous ne pouvons pas utiliser des extensions, nous devons utiliser des implémentations et nous pouvons utiliser le mot clé extend pour hériter l'interface d'une autre interface.
la source