interfaces consiste en des méthodes abstraites et des variables finales. Eh bien, il est utilisé comme contrat généralisé, de sorte que les classes de la mise en œuvre doivent suivre les règles en mettant en œuvre des méthodes de mise en œuvre. P>
est-ce la merci. p>
11 Réponses :
C'est un exemple classique mais de toute façon. Par exemple, vous souhaitez écrire un jeu où il faut des cercles, des carrés, des triangles et d'autres formes. Vous ne savez pas quelle forme viendra la prochaine fois, vous devriez donc écrire une interface avec un nom indiquant Si vous n'utilisez pas cette interface, vous devez écrire une méthode différente de tous les types de objets drowables ( Ceci est l'une des scopes d'interfaces. p> p> forme code> avec une méthode abstraite dessin code> et triangle Code>, Cercle code>, classes carrés code> implémentant votre interface code> de forme code>. Après cela, vous ne vous souciez pas de quelle forme viendra ensuite. Vous pouvez donner à votre dites dessinat (forme S) code> méthode une instance de de forme code> et d'appeler la méthode dessinée pour cela. Il fonctionnera pour tous les types qui mettront en œuvre forme code>.
dessinsquare (carré s) code>, drawcircle (encercler c) code> etc ...) p>
Java ne permet pas de multiples héritage. p>
Leur décision de conception était de mettre en œuvre des interfaces. p>
Pour que vous puissiez définir le comportement souhaité dans une interface et que votre classe puisse l'appliquer.
Cette classe peut étendre
L'objectif principal des interfaces consiste à servir de guide pour les programmeurs qui doivent mettre en œuvre certains comportements dans une classe d'implémentation.
Par exemple, si vous alliez mettre en place une classe de file d'attente qui implémente l'interface de la liste, la liste L'interface exigerait que vous mettriez implémenter la méthode d'ajout et une méthode de suppression, par exemple. p> si votre file d'attente implémente l'interface de liste, vous devez implémenter votre propre version de l'ADD et Supprimer les méthodes. Le principal avantage d'utiliser une interface est que vous pouvez ensuite échanger un type avec un autre. Par exemple: p> ou p> En implémentant votre classe en tant qu'interface, vous pouvez déclarer vos variables en utilisant un plus type générique que si vous deviez utiliser un type de béton. Je trouve que cela sera vraiment utile avec un objet de haricot ou de transfert de données où une classe de service peut utiliser une arrachelist, mais une autre pourrait bénéficier d'un hashset. Dans ma bean, je peux utiliser la déclaration d'interface et laisser chaque classe de service déterminer le type de béton qu'il souhaite utiliser en moulant la variable sur le type de béton. P> Les interfaces sont essentiellement un moyen d'aider à normaliser les choses ainsi que faciliter la tâche d'échanger une classe d'implémentation avec une autre. P> Je trouve également qu'ils m'aident à vous rappeler de mettre en œuvre certaines méthodes lorsque je programmment quelque chose, car je peux les décrire d'abord dans l'interface et ensuite Le compilateur me rappelle de les implémenter. P> p>
Ok l'a eu. Toute autre utilisation majeure de celui-ci?
En tant qu'utilisateurs d'autres réponses mentionnées, les interfaces peuvent quelque peu aider à l'absence de multiples héritage. Dans la plupart des cas, ils sont généralement utilisés par les développeurs ou projets de bibliothèque où il peut être nécessaire d'échanger un sous-type avec un autre. La mise en cache ou le stockage de données est un exemple possible. L'enregistrement en est un autre. Vous pouvez utiliser une interface de datastore pour résumer votre JDO, Hibernate, Postgres, MySQL, etc. afin que vous puissiez échanger un avec un autre sans avoir à modifier toutes les déclarations de variable dans votre code.
Merci. J'ai ma réponse.
Une classe peut implémenter de nombreuses interfaces et peut donc fournir une "poignée" différente à la classe en question. C'est ainsi que les classes sont considérées comme polymorphes (elles peuvent avoir de nombreuses formes en fonction de la façon dont vous les référez). p>
Jetez un coup d'œil à la documentation du didacticiel Java à ce sujet. Certains exemples utiles sont; p>
Le dernier lien est formidable en termes de prise en charge avec des collections en Java et de la manière dont ils utilisent des interfaces pour fournir leurs fonctionnalités. p>
Donc, si vous avez besoin de plus, 1 logique à mettre en œuvre par une classe [qui n'est pas rare], vous ne pouvez utiliser que les classes interface code> s est crucial en Java car il n'a pas de multiples héritage fort>. Si vous souhaitez que votre classe soit ibler code>, mais aussi vous souhaitez implémenter une certaine logique, vous ne pouvez pas hériter de 2 classes, vous devrez donc utiliser interface code>. p>
abstraites code>, vous devrez utiliser interface < / code> s p>
Comme vous l'avez dit, les interfaces sont utilisées pour spécifier contrats em> les classes qui les implémentent doivent suivre. Les scénarios dans lesquels ils sont utilisés sont généralement un scénario où vous appelez une classe qui implémente une interface particulière. Le fait que les implements d'une interface particulière vous fournissent les connaissances que cette classe donnée implémente effectivement un ensemble donné de méthodes. Habituellement, vous ne vous souciez pas de ce qui se passe dans ces méthodes, ce qui compte pour vous, c'est que la classe a ces méthodes. Par exemple, vous voudrez peut-être envisager le modèle de conception d'observateur . Fondamentalement, vous avez un objet qui a un état qu'il partage avec d'autres objets et leur transmet aux notifications lorsque certaines de ses données changent. P> Donc, si, si, par exemple, tous les observateurs implémentent l'interface suivante: p> Le sujet peut, sans aucune connaissance de ce que ce soit à ce sujet, faire quelque chose comme ceci: p> Comme vous le pouvez Voir, la classe Les interfaces permettent également de pour certains types de sécurité. Les interfaces sont généralement utiles lorsque vous disposez d'une série de classes mettant en œuvre une série de comportements similaires que vous souhaitez généralement stocker dans une structure de données de type sécurisée. C'est généralement un bon travail sur le fait que Java n'autorise pas de multiples héritage. Donc, dans l'exemple prévu ci-dessus, je peux avoir une quantité indéfinie de différentes classes. Mais tant qu'ils impliquent tous l'interface code> observateur code>, ils peuvent tous être ajoutés à la même liste. p> dans les méthodes code> notifier code>, je peux simplement itérer les éléments de la liste au lieu de vérifier si l'élément est d'un certain type, puis de la jeter, ce qui peut introduire certains frais généraux supplémentaires dans l'exécution du programme. p> p> MySubject CODE> n'a aucune connaissance de la manière dont l'observateur implémente la méthode code> notify code>, ce qu'elle se soucie vraiment du fait que cela implémente-t-il. Cela vous permet de créer différents observateurs qui ont des moyens différentes de mettre en œuvre leur propre classe code> notify code> sans nécessiter de modifications dans la classe MySubject code> Classe p>
Voici où j'ai compris leur utilisation lorsque j'ai lu d'abord à leur sujet: P>
Dites que vous recevez un lecteur de disque portable comme cadeau. Quand vous essayez de Utilisez le joueur, rien ne se passe - le joueur nécessite des batteries. Quelles batteries entrent dans le joueur? Heureusement, à l'arrière de la Le joueur est la spécification,
Ce lecteur nécessite deux AA Batteries. '' Avec cette information, vous pouvez obtenir la taille correcte composants (les batteries) et les adapter au joueur. Le complété code> assembly '' 'fonctionne. p>La spécification des batteries du lecteur de disque servies plusieurs utilisables Objectifs: p>
La spécification a dit à l'utilisateur que le composant doit être installé sur le joueur pour assurer un fonctionnement correct. La spécification a dit le Fabricant du lecteur de disque Quelle taille de construction pour construire le joueur chambre de batterie et quelle tension et quelle ampérage à utiliser dans le électronique du joueur. La spécification a dit au fabricant de la batterie quelle taille, quelle taille et ampérage pour construire des piles afin que les autres puissent Utilise les. Ces trois faits sont importants en eux-mêmes, mais ils aussi impliquer que l'utilisateur, le fabricant de disque et la batterie le fabricant n'a pas besoin de communiquer directement les uns avec les autres --- la la spécification de la batterie est tout ce qui est nécessaire pour chaque partie à effectuer sa propre tâche indépendamment des deux autres. p> blockQuote>
C'est un bon exemple. Vous pouvez penser aux marques de batteries comme implémentations concrètes de l'interface de type batterie. Vous pouvez penser à Energizer, au Duracell et à Sony comme toutes les impléments de l'interface AA. Les connexions de la batterie sont identiques et la sortie est identique et, bien sûr, la taille, mais la marque et peut-être des composants internes subtils sont différents. +1
Un peu d'histoire aide: p>
Le modèle d'objet en Java est à peu près une version simplifiée du C ++. Qui a souffert du "problème de diamant" face à plusieurs héritages. P>
en Java, tandis que 1 classe ne peut jamais prolonger 1 classe de base, il peut implémenter plusieurs interfaces. Lorsque 2 méthodes ou plus de ces interfaces implémentées ont la même signature (nom, numéro de paramètre et types), le programmeur sera consciemment conscient de cela et dans le pire des cas (au cas où il oublie de mettre en œuvre des méthodes), leur comportement sera fait défaut. retourner nul ou ne rien faire (c'est ce que les IDE font de toute façon). Avec multiples héritage, vous devrez toujours être conscient de ne pas remplacer les méthodes des classes de base. P>
Cette approche de l'idée d'interfaces fonctionne bien avec le visage que toutes les méthodes de Java sont par défaut virtuelle. Cette construction d'interface est donc la façon dont Java traite de multiples héritages et obtient une certaine pression du programmeur. P>
Oui, une interface consiste en des méthodes abstraites et des variables finales, et elle est utilisée comme contrat généralisé, de sorte que les classes de la mise en œuvre doivent mettre en œuvre les méthodes décrites.
Cependant, ce n'est pas la seule utilisation / la portée de une interface. C'est la définition d'une interface. P>
Les interfaces sont utilisées lorsqu'elle est connue à l'avance que tout nombre de classes inconnues pourrait faire le travail, à condition qu'ils présentent tous un ensemble de comportement standardisé. Ainsi, si j'ai un objet téléphonique et que je souhaite permettre à quelqu'un de l'écouter, je pourrais écrire un auditeur téléphonique qui établit comment un téléphone peut signaler des objets qui n'ont pas encore été écrits (et n'ont donc aucune classe concrète spécifique). p>
souvent dans votre programmation, vous pourriez fournir une (ou plusieurs) classes concrètes; Mais, une interface est un signal selon lequel il s'agit d'un point d'extensibilité prévu. Pour revenir à mon exemple de classe de téléphone, je pourrais écrire dans la classe de téléphone. P> téléphoniste de signalisation qui n'a même pas été écrit (encore) qu'un téléphone a sonné. < / P> Ce n'est pas vraiment "juste" sur la simulation de multiples héritages, bien que ceux provenant d'un arrière-plan C ++ identifient comme un moyen de "résoudre" héritage multiple. Il s'agit de spécifier un contrat pour les cours futurs à mettre en œuvre. L'héritage multiple de C ++ confond de contrat avec la mise en œuvre (et vous exécutez donc le risque du motif diamant redouté). P> P>
Je vais vous donner un exemple.
Vous avez une classe de voiture p> et vous voulez une super voiture dont le rebond doit rebondir (mais une fonctionnalité enfouie appartient à la balle / en caoutchouc) p> Ici, votre super-voiture peut implémenter des baissières p> Vous avez maintenant une voiture de super-voiture qui peut rebondir. P>
Grand exemple! +1 pour utiliser un adjectif pour vos interfaces!
Un exemple large est:
Spécification de la langue Java [Interface, contrat] de Java Community
Mise en œuvre par différents fournisseurs comme Sun / Oracle JDK, IBM JDK, OpenJDK, etc. P>
Je ne sais pas si c'est exactement une réponse, alors je vais commenter.
interface code> s est crucial en Java car vous n'avez pas de héritage multiple. Si vous souhaitez que votre classe soitibler code>, mais également vous souhaitez implémenter une certaine logique, vous ne pouvez pas hériter de 2 classes, vous devrez donc utiliser l'interface. Donc, si vous avez besoin de plus, 1 logique à mettre en œuvre par une classe [qui n'est pas rare], vous ne pouvez pas utiliser uniquement les classesabstraites code>, vous devrez utiliser une interfacecode >.Peut-être dupliquer de Stackoverflow.com/q/8531292/1055241 Consultez la réponse acceptée pour comprendre le concept d'interfaces.
@Ajj: Ensuite, je l'ai ajouté comme une réponse.
C'est un bon lien GP, merci !!!
@Ajj: 300 000 lignes Java CodeBase où il n'y a pas une classe abstrait i> et où toutes les classes sont finale i>. En d'autres termes: nous ne croyons pas en "réutilisation de code par le biais d'une héritage de mise en œuvre" i>. Nous considérons que Java soutient de multiples héritages car le type d'héritage i> que nous avons dans notre code de code est l'héritage d'interface (et l'utilisation libérale de multiples héritage d'interface). TOUT B> OOA / OOO (y compris ceux utilisant plusieurs héritage) peut être traduit en Java à l'aide de l'interface héritage. Nous préférons de loin la délégation sur l'héritage de la mise en œuvre concrète ...