Aller au contenu principal
Publié le

Les interfaces en Java

Partager :

Introduction

Les interfaces sont un élément essentiel de la programmation orientée objet en Java. Elles fournissent une structure qui garantit la cohérence et l'implémentation des méthodes essentielles dans différentes classes.

Le Rôle des Interfaces

En Java, les interfaces jouent le rôle de contrats. Elles définissent un ensemble de méthodes qu'une classe doit implémenter. Elles n'ont pas d'implémentation propre ; elles fournissent uniquement la signature des méthodes.

Pourquoi Utiliser les Interfaces ?

  1. Polymorphisme : Les interfaces favorisent le polymorphisme. Tout objet d'une classe qui implémente une interface peut être référencé en tant qu'objet de cette interface.
  2. Flexibilité : Les interfaces rendent le système extensible. Elles permettent au code d'évoluer sans casser les classes qui utilisent déjà des interfaces existantes.
  3. Sécurité : Elles établissent un contrat strict que la classe doit respecter, garantissant que certaines méthodes soient implémentées.

Design Patterns et Interfaces

De nombreux design patterns en Java tirent parti des interfaces grâce à leur flexibilité. Par exemple, le pattern Adapter utilise des interfaces pour rendre compatibles des interfaces incompatibles, et le pattern Factory peut utiliser des interfaces pour définir une méthode de création.

Différence Entre Interfaces et Classes Abstraites

Bien que les deux fournissent un moyen de contraindre les classes à suivre un contrat donné, il existe des différences fondamentales :

  • Les classes peuvent implémenter plusieurs interfaces, mais ne peuvent hériter que d'une seule classe abstraite.
  • Les interfaces n'ont pas de variables d'état ; les classes abstraites peuvent en avoir.
  • Les méthodes des interfaces sont, par défaut, public et abstract. Dans les classes abstraites, vous disposez d'une plus grande flexibilité quant à la visibilité et à l'implémentation.

Illustration par le Code

Les interfaces sont utilisées pour garantir l'implémentation de certaines méthodes :

package com.caffeinealgorithm.programaremjava;

public class Interfaces {
  public void Run() {
    var voiture = new Voiture("Nissan", "Juke", "Avant", "Manuelle", "Diesel", 1461, 175, 110, 25070);
    voiture.info();

    /*
      Marque : Nissan
      Modèle : Juke
      Emplacement du moteur : Avant
      Transmission : Manuelle
      Carburant : Diesel
      Cylindrée : 1461 cc
      Vitesse maximale : 175 km/h
      Puissance maximale : 110 ch
      Prix : 25070.00 euros
    */
  }
}

class Voiture implements IVoiture {
  private String marque, modele, emplacementDuMoteur, transmission, carburant;
  private int cylindree, vitesseMaximale, puissanceMaximale;
  private double prix;

  public Voiture(String marque, String modele, String emplacementDuMoteur, String transmission, String carburant,
                 int cylindree, int vitesseMaximale, int puissanceMaximale, double prix) {
    this.marque = marque;
    this.modele = modele;
    this.emplacementDuMoteur = emplacementDuMoteur;
    this.transmission = transmission;
    this.carburant = carburant;
    this.cylindree = cylindree;
    this.vitesseMaximale = vitesseMaximale;
    this.puissanceMaximale = puissanceMaximale;
    this.prix = prix;
  }

  public void info() {
    System.out.printf("Marque : %s\n", marque);
    System.out.printf("Modèle : %s\n", modele);
    System.out.printf("Emplacement du moteur : %s\n", emplacementDuMoteur);
    System.out.printf("Transmission : %s\n", transmission);
    System.out.printf("Carburant : %s\n", carburant);
    System.out.printf("Cylindrée : %d cc\n", cylindree);
    System.out.printf("Vitesse maximale : %d km/h\n", vitesseMaximale);
    System.out.printf("Puissance maximale : %d ch\n", puissanceMaximale);
    System.out.printf("Prix : %.2f euros", prix);
  }
}

interface IVoiture {
  void info();
}

Dans cet exemple, la classe Voiture implémente l'interface IVoiture, garantissant l'existence de la méthode info().

Conclusion

Les interfaces en Java sont des outils essentiels qui offrent de nombreux avantages en termes de polymorphisme, de flexibilité et de sécurité. Elles sont fondamentales dans la construction de systèmes extensibles et maintenables. La capacité à utiliser les interfaces conjointement avec des design patterns en fait une partie inestimable de l'arsenal de tout développeur Java.

Happy coding!