11
votes

Pourquoi toutes les méthodes d'interface doivent-elles être implémentées dans une classe la mise en œuvre en Java

Je sais que c'est le but de l'interface et de la classe peut être déclaré abstrait pour y échapper.

mais existe-t-il une utilisation pour la mise en œuvre de toutes les méthodes que nous déclarons dans une interface? Cela n'augmentera-t-il pas le poids et la complexité du code si nous continuons à définir toutes les méthodes, même il n'est pas pertinent pour cette classe? pourquoi il est conçu alors?


2 commentaires

Quel serait le point de l'interface autrement?


Parfois, il existe une raison légitime de ne pas mettre en œuvre toutes les méthodes, voir Eventadapters


6 Réponses :


8
votes

Ce que vous critiquez est exactement l'interface d'objectif réalisée. Si vous ne souhaitez pas implémenter une interface, ne déclarez pas votre classe la mise en œuvre.

ne plus augmenter le poids et la complexité du code si nous Continuez à définir toutes les méthodes même si elle n'est pas pertinente pour cela classe?

Lorsque vous programmez contre une interface, vous souhaitez que l'objet concret derrière elle doit mettre en œuvre toutes ses méthodes. Si votre objet concret n'a pas besoin ou ne peut pas implémenter toute la méthode d'interface, vous avez probablement un problème de conception à réparer.


0 commentaires

6
votes

Lorsque tout élément de code reçoit une instance d'une interface sans savoir quelle classe est derrière elle, ce morceau de code doit être assuré de la possibilité d'appeler n'importe quelle méthode dans une interface. C'est ce qui rend une interface un contrat entre les appelants et les fournisseurs de la fonctionnalité. Le seul moyen de réaliser que toutes les classes non abstraites mettent en œuvre l'interface pour fournir des implémentations pour toutes ses fonctions.

Il existe deux moyens généraux de faire face à la nécessité de ne pas mettre en œuvre certaines des fonctionnalités:

  • Ajout d'une méthode de testeur et une implémentation qui jette non pris en chargeOrexception et
  • fractionnement de votre interface selon les besoins en parties afin que toute la méthode d'une pièce puisse être mise en œuvre.

    Voici un exemple de la première approche: xxx

    Voici un exemple de la deuxième approche: xxx


2 commentaires

Je peux comprendre, mais mes pensées sont la raison pour laquelle il est fait pour travailler, donc à Java, comme celui-ci pour implémenter toutes les méthodes d'une interface? Sera très rempli si vous pouvez citer un exemple de temps réel. Comme vous le feriez savoir à cette époque, je suis un débutant


@Deepak Si vous recherchez un exemple de vie réel d'une interface avec des méthodes facultatives, java Liste interface. Il dispose de dix opérations facultatives qui modifient la liste, en plus de toutes les opérations d'examen du contenu de la liste.



0
votes

Cela peut dépendre de Principe de substitution de Liskov

Donc, avoir un outil B signifie que vous pouvez utiliser A lorsque B est nécessaire et pour le faire fonctionner sans problèmes, < Code> A doit avoir au moins les mêmes méthodes de B .

Veuillez garder à l'esprit que le mien n'est pas une réponse «appropriée», car elle n'est pas basée sur des sources officielles!


0 commentaires

1
votes

ne plus augmenter le poids et la complexité du code si nous Continuez à définir toutes les méthodes même si elle n'est pas pertinente pour cela classer?

Oui, vous avez raison, ça va. C'est pourquoi c'est la meilleure pratique dans votre codage pour suivre le Principe de ségrégation d'interface qui recommande de ne pas forcer les clients à implémenter des interfaces qu'ils n'utilisent pas. Donc, vous ne devriez jamais avoir une interface "graisse" avec de nombreuses méthodes, mais beaucoup petites interfaces méthodes de regroupement , chaque groupe servant un comportement ou un sous-module spécifique.
De cette façon, les clients d'une interface impliquent uniquement les méthodes nécessaires sans jamais être forcée à mettre en œuvre des méthodes dont ils n'ont pas besoin.


0 commentaires

21
votes

L'idée d'une interface dans Java ressemble beaucoup à un contrat (et peut-être vu rétrospectivement que cela aurait dû être le nom du concept)

L'idée est que la classe mise en œuvre l'interface a promis solennellement pour fournir toutes les choses énumérées dans le contrat afin que tous les utilisent d'un Classe Mise en œuvre L'interface est garantie d'avoir cette fonctionnalité disponible.

Dans mon expérience, cette installation est l'une des choses qui permet de construire des cathédrales en Java.


0 commentaires

0
votes

Lors de la mise en oeuvre d'une interface, nous n'avons peut-être pas besoin de définir toute la méthode déclarée dans l'interface.Nous pouvons définir certaines méthodes, que nous n'avons pas besoin, sans rien à l'intérieur du corps.


0 commentaires