Pourquoi avons-nous besoin d’interfaces en Java?

En Java pour implémenter l’inheritance multiple, nous utilisons des interfaces. Est-ce la seule utilisation des interfaces? Si oui, quelle est l’utilisation principale de l’interface en Java? Pourquoi avons-nous besoin d’interfaces en Java?

Je dirais que l’utilisation principale est le polymorphism, ou la possibilité d’effectuer la même opération sur un certain nombre d’objects différents. Si différents objects implémentent tous la même interface et ont la même méthode, vous pouvez stocker tous ces objects dans un vecteur, par exemple, et parcourir le vecteur appelant cette méthode sur chacun d’eux.

Je pensais également à la façon dont les interfaces sont utilisées. J’espère que cela aidera les autres:

Une interface est un contrat (ou un protocole ou une compréhension commune) de ce que les classes peuvent faire. Lorsqu’une classe implémente une interface donnée, elle promet de fournir une implémentation à toutes les méthodes abstraites déclarées dans l’interface. L’interface définit un ensemble de comportements communs. Les classes implémentent l’interface en accord avec ces comportements et fournissent leur propre implémentation aux comportements. Cela vous permet de programmer à l’interface, au lieu de l’implémentation réelle. L’une des principales utilisations de l’interface est de fournir un contrat de communication entre deux objects. Si vous savez qu’une classe implémente une interface, vous savez que cette classe contient des implémentations concrètes des méthodes déclarées dans cette interface, et vous êtes assuré de pouvoir invoquer ces méthodes en toute sécurité. En d’autres termes, deux objects peuvent communiquer en fonction du contrat défini dans l’interface, au lieu de leur implémentation spécifique.

Deuxièmement, Java ne prend pas en charge l’inheritance multiple (contrairement à C ++). L’inheritance multiple vous permet de dériver une sous-classe de plusieurs superclasses directes. Cela pose un problème si deux super-classes directes ont des implémentations en conflit. (Lequel suivre dans la sous-classe?). Cependant, l’inheritance multiple a sa place. Java le fait en vous permettant “d’implémenter” plusieurs interfaces (mais vous ne pouvez “étendre” qu’à partir d’une seule superclasse). Les interfaces ne contenant que des méthodes abstraites sans implémentation réelle, aucun conflit ne peut survenir entre les multiples interfaces. (L’interface peut contenir des constantes mais n’est pas recommandée. Si une sous-classe implémente deux interfaces avec des constantes en conflit, le compilateur signalera une erreur de compilation.)

à partir de: http://www.ntu.edu.sg/home/ehchua/programming/java/J3b_OOPInheritancePolymorphism.html#zz-6.6

En plus de ces réponses, je dirais que l’utilisation la plus importante des interfaces est de réduire le couplage entre les composants de votre logiciel.

Une interface permet de représenter un accord entre les classes sur la manière dont elles vont se parler sans être liées aux implémentations réelles.

Cela nous permet de remplacer les implémentations par d’autres (très utiles pour tester ou modifier les cas d’utilisation) sans changer le code compilé.

Vous en avez besoin pour pouvoir taper vos objects en dehors de la hiérarchie.

Par exemple, les objects pouvant être comparés peuvent être à peu près n’importe où dans la hiérarchie des objects – ils n’ont pas besoin d’avoir un ancêtre commun pouvant être comparé. Ssortingng peuvent être comparées, les Integer peuvent être comparés, vous pouvez même créer vos propres Frame pouvant être comparés (par exemple, une image est “moins” qu’une autre image si elle est plus importante au premier plan, c.-à-d. autre cadre). Ainsi, si vous voulez vous référer à une chose qui peut être comparée, vous serez obligé de déclarer une variable avec l’ancêtre le plus général – dans ce cas, Object . Ceci est trop général, car alors il peut aussi recevoir des valeurs qui ne sont pas comparables (et lancer des erreurs lorsque vous essayez de les comparer).

Ainsi, l’interface Comparable : sélectionne toutes les classes qui implémentent la fonctionnalité de comparaison dans la hiérarchie des sous-classes et des super-classes.

Certains codes ne seront pas compilés sans cela.

Par exemple, dans:

 for (Ssortingng name : list) { System.out.print("\nIn foreach loop: name: " + name); } 

list doit implémenter l’ java.lang.Iterable interface .