JavaRush /Blog Java /Random-FR /Que sont les interfaces
fog
Niveau 18

Que sont les interfaces

Publié dans le groupe Random-FR
Une interface est un contrat (accord) public généralement accepté qui décrit un certain comportement. A quoi servent-ils ? Par exemple, disons que nous avons un lien pointant vers une liste de chaînes. Disons que de nombreux éléments sont ajoutés à cette liste au début, puis que la liste entière est traitée une fois. Disons que nous décidons de suivre la recommandation bien connue et d'utiliser la classeArrayList:
ArrayList<String> list = new ArrayList<>();
Nous avons écrit un comportement de programme en 100 500 lignes de code utilisant cette liste de chaînes et utilisé des méthodes spécifiques à la classe pour optimiser les performances ArrayList. Par exemple assurerCapacity() . Tant que les lignes sont ajoutées à la fin de la liste, tout fonctionne bien et rapidement. Mais maintenant, nous devons réorienter notre programme vers un type de travail légèrement différent, où les lignes sont ajoutées principalement au début de la liste. Pour ce type de charge, il est bien plus adapté LinkedList. Mais si nous voulons traduire notre programme de 100 500 lignes de code sur des rails LinkedList, nous devrons alors trouver et supprimer l'utilisation de ArrayListméthodes spécifiques, peut-être à certains endroits en modifiant considérablement la logique des sections individuelles du programme. Si nous utilisions uniquement les méthodes disponibles dans ArrayList, et dans LinkedList, nous n'aurions pas à le faire. Nous pourrions simplement modifier une ligne de code : la déclaration de liste :
LinkedList<String> list = new LinkedList<>();
On peut remarquer qu'il serait plus pratique de placer la déclaration des méthodes communes à ces classes dans une classe ancêtre, éventuellement abstraite par exemple AbstractList. Dans ce cas, nous pourrions déclarer notre liste comme ceci :
AbstractList<String> list = new ArrayList<>();
Et nous pourrions rapidement changer d'implémentation comme ceci :
AbstractList<String> list = new LinkedList<>();
Mais dans ce cas, les classes que nous pouvons utiliser dans notre programme sont limitées aux seuls descendants de la classe AbstractList, même s'il existe des classes plus appropriées qui ne sont pas des descendants de la classe AbstractList, mais qui ont les mêmes méthodes avec le même comportement. Que dois-je faire? C'est pourquoi les interfaces ont été inventées . Une interface est une convention sur un ensemble de méthodes et leur comportement dans laquelle des classes totalement indépendantes peuvent s'engager, permettant à chacune d'entre elles d'être référencée par une seule référence. Par exemple comme ceci :
List<String> list;
list = new ArrayList<>();
list = new LinkedList<>();
list = new AnotherListClass<>();
Même si AnotherListClassles classes n’ont pas de classes ancêtres communes, ArrayListsauf . Un bon exemple d'interface est la direction d'une voiture : une voiture a un volant, des pédales et une boîte de vitesses. Dans la grande majorité des voitures, ces éléments suivent la même convention de comportement. Par exemple, si vous tournez le volant dans le sens inverse des aiguilles d’une montre, la voiture tournera à gauche plutôt que d’accélérer, quelle que soit sa marque. Si vous savez utiliser ces commandes, vous pouvez facilement gérer n'importe quelle voiture, quel que soit son modèle, son année, sa marque ou son type de moteur. De plus, on peut imaginer une situation dans laquelle un type de transport complètement différent (par exemple, un vaisseau spatial) aurait la même interface de contrôle que les voitures. Si vous, sachant conduire une voiture, vous retrouvez dans le siège du pilote d'un tel navire, vous pourrez éviter de vous perdre dans cette situation. Répétons encore une fois :LinkedListObject
  • Une interface est un contrat (accord) sur le comportement.
  • De nombreuses classes, même celles qui ne sont pas liées par héritage, peuvent déclarer qu'elles acceptent de respecter ce contrat (implémentation de l'interface).
  • Placer la description du comportement dans une interface distincte est très pratique, car cela augmente la flexibilité du code, vous permettant de basculer l'implémentation (classe implémentant l'interface) de l'interface vers des classes non liées par héritage.
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION