Les interface en Java

1 – Qu’est ce qu’une interface en Java ?

Une interface du langage de programmation Java est un type abstrait utilisé pour spécifier un comportement que les classes doivent implémenter. Ils sont similaires aux protocoles. Les interfaces sont déclarées à l’aide du mot-clé interface et ne peuvent contenir que des déclarations de méthode et des déclarations de constante (variable declaratire déclarée à la fois statique et finale). Toutes les méthodes d’une interface ne contiennent pas d’implémentation (corps de méthodes) de toutes les versions antérieures à Java 11. À partir de Java 8, les méthodes par défaut et les méthodes statiques peuvent avoir une implémentation dans la définition d’interface.

Les interfaces ne peuvent pas être instanciées, mais sont plutôt implémentées. Une classe qui implémente une interface doit implémenter toutes les méthodes non définies par défaut décrites dans l’interface ou être une classe abstraite. Les références d’objet en Java peuvent être spécifiées comme étant d’un type d’interface; dans chaque cas, ils doivent être nuls ou être liés à un objet qui implémente l’interface.

L’un des avantages de l’utilisation des interfaces est qu’elles simulent un héritage multiple. Toutes les classes en Java doivent avoir exactement une classe de base, la seule exception étant java.lang.Object (la classe racine du système de types Java); l’héritage multiple de classes n’est pas autorisé. Cependant, une interface peut hériter de plusieurs interfaces et une classe peut implémenter plusieurs interfaces.

2 – Une interface est crée pour quelle raison ?

Pour bien comprendre l’utilité des interfaces en Java, prenons un exemple simple :

  • On souhaite par exemple créer une classe Rectangle qui permet de générer un objet rectangle
  • On souhaite aussi créer une classe triangle permettant de générer un objet triangle
  • On souhaite créer une classe trapèze permettant de généer un objet trapèze
  •    …………………….

Les objets rectangle, triangle et trapèze  possèdent tous des propriétés communes comme : surface, perimètre, nombre de cotés… Et on souhaite créer un moyen qui permet de gérer ce processus c.a.d un triangle doit obligatoirement posséder une méthode qui calcule le périmètre et une méthode qui calcul la surface, faute de quoi le développeur  rencontre un message d’erreur lui indiquant qu’il doit obligatoirement insérer les méthodes perimetre() et surface()

C’est à ce niveau là qu’une interface intervient ! On doit créer une et appelons la par exemple interface polygone qui contient l’ensemble des  méthodes communes aux formes géométriques cités ci-dessus :

3 – Comment créer et utiliser une interface

En pratique, la création et la declaration d’une interface est semblable à une classe, à la différence que l’on remplace le mot-clé class par interface.

public interface Polygone {
	public double périmètre();
	public int nombreCotes();
}

Les classes  rectangle, triangle et trapèze vont être maintenant declarées de la même façon comme celle de l’héritage, à l a différence de remplacer le mot clé extends par implement:

Class Rectagle

public class Rectangle implements Polygone {
public double Longueur;
public double largeur;
public Rectangle(double L,double l){
	this.Longueur=L;
	this.largeur=l;
}

	public double périmètre(){
		return 2*(this.Longueur+this.largeur);
	}
    public int nombreCotes(){
		return 4;
	}

	public void afficher(){
 System.out.println("La périmètre du rectangle est : "+ this.périmètre());
	}
	public static void main(String[] args) {
	Polygone R1=new Rectangle(7,4);
	Rectangle R2=new Rectangle(9,3);
	R1.afficher();
	R2.afficher();
	}
}

Class Triangle

public class Triangle implements Polygone{
	public double coté1;
	public double coté2;
	public double coté3;
	//création du constructeur
	public Triangle(double c1,double c2,double c3){
		this.coté1=c1;
		this.coté2=c2;
		this.coté3=c3;
	}
	
	public double périmètre(){
		return this.coté1+this.coté2+this.coté3;
	}
	public int nombreCotes(){
		return 3;
	}
	public void afficher(){
    System.out.println("La périmètre du triangle est : "+ this.périmètre());	
	}
	public static void main(String[] args) {
	Polygone T1=new Triangle(2,3,5);
	Triangle T2=new Triangle(4,4,5);
	T1.afficher();
	T2.afficher();

	}

}