8
votes

Portée de l'utilité de l'interface en Java

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.

est-ce la utilise uniquement / étendue de l'interface en Java? Ont-ils introduit le concept d'interface que pour cela, ou je manque quelque chose? Aidez-moi s'il vous plaît à comprendre l'utilisation d'interfaces, avec des exemples. (Pas sur la manière d'utiliser ou de créer des interfaces, mais de montrer comment ils aident les programmeurs).

merci.


5 commentaires

Je ne sais pas si c'est exactement une réponse, alors je vais commenter. interface s est crucial en Java car vous n'avez pas de héritage multiple. Si vous souhaitez que votre classe soit ibler , 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 classes abstraites , vous devrez utiliser une interface .


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 et où toutes les classes sont finale . En d'autres termes: nous ne croyons pas en "réutilisation de code par le biais d'une héritage de mise en œuvre" . Nous considérons que Java soutient de multiples héritages car le type d'héritage 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 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 ...


11 Réponses :


3
votes

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 forme avec une méthode abstraite dessin et triangle , Cercle , classes carrés implémentant votre interface de forme . Après cela, vous ne vous souciez pas de quelle forme viendra ensuite. Vous pouvez donner à votre dites dessinat (forme S) méthode une instance de de forme et d'appeler la méthode dessinée pour cela. Il fonctionnera pour tous les types qui mettront en œuvre forme .
xxx

Si vous n'utilisez pas cette interface, vous devez écrire une méthode différente de tous les types de objets drowables ( dessinsquare (carré s) , drawcircle (encercler c) etc ...)

Ceci est l'une des scopes d'interfaces.


0 commentaires

3
votes

Java ne permet pas de multiples héritage.

Leur décision de conception était de mettre en œuvre des interfaces.

Pour que vous puissiez définir le comportement souhaité dans une interface et que votre classe puisse l'appliquer.
Cette classe peut étendre toute catégorie d'autres catégories (seulement 1) et implémenter autant d'interfaces au besoin.


0 commentaires

3
votes

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. xxx

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: xxx

ou xxx

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.

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.

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.


3 commentaires

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.



3
votes

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).

Jetez un coup d'œil à la documentation du didacticiel Java à ce sujet. Certains exemples utiles sont;


0 commentaires

2
votes

interface s est crucial en Java car il n'a pas de multiples héritage . Si vous souhaitez que votre classe soit ibler , mais aussi vous souhaitez implémenter une certaine logique, vous ne pouvez pas hériter de 2 classes, vous devrez donc utiliser interface .

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 abstraites , vous devrez utiliser interface < / code> s


0 commentaires

4
votes

Comme vous l'avez dit, les interfaces sont utilisées pour spécifier contrats 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.

Donc, si, si, par exemple, tous les observateurs implémentent l'interface suivante: xxx

Le sujet peut, sans aucune connaissance de ce que ce soit à ce sujet, faire quelque chose comme ceci: xxx

Comme vous le pouvez Voir, la classe MySubject n'a aucune connaissance de la manière dont l'observateur implémente la méthode notify , 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 notify sans nécessiter de modifications dans la classe MySubject 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 observateur , ils peuvent tous être ajoutés à la même liste.

dans les méthodes notifier , 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.


0 commentaires

10
votes

Voici où j'ai compris leur utilisation lorsque j'ai lu d'abord à leur sujet:

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é assembly '' 'fonctionne.

La spécification des batteries du lecteur de disque servies plusieurs utilisables Objectifs:

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.


1 commentaires

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



2
votes

Un peu d'histoire aide:

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.

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.

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.


0 commentaires

2
votes

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.

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).

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. xxx

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é).


0 commentaires

5
votes

Je vais vous donner un exemple.

Vous avez une classe de voiture xxx

et vous voulez une super voiture dont le rebond doit rebondir (mais une fonctionnalité enfouie appartient à la balle / en caoutchouc)

Ici, votre super-voiture peut implémenter des baissières xxx

Vous avez maintenant une voiture de super-voiture qui peut rebondir. xxx


1 commentaires

Grand exemple! +1 pour utiliser un adjectif pour vos interfaces!



0
votes

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.


0 commentaires