interface Mot-clé en Java
Le mot-clé interface
en Java est utilisé pour déclarer un type spécial de classe qui ne contient que des méthodes abstraites, des méthodes par défaut, des méthodes statiques et des variables finales. Les interfaces permettent de réaliser l'abstraction et l'héritage multiple en Java.
Utilisation
Les interfaces sont utilisées pour spécifier un ensemble de méthodes qu'une classe doit implémenter. Ils sont particulièrement utiles pour définir un contrat auquel plusieurs classes peuvent adhérer, en s'assurant qu'elles fournissent des fonctionnalités spécifiques.
Syntax
interface InterfaceName {
// constant fields
// abstract methods
// default methods
// static methods
}
InterfaceName
: Le nom de l'interface.- Champs constants : Les champs déclarés dans une interface sont implicitement
public
,static
, etfinal
. - Méthodes abstraites : Méthodes sans corps qui doivent être implémentées par les classes qui implémentent l'interface.
- Méthodes par défaut : Méthodes avec un corps qui fournissent une implémentation par défaut.
- Méthodes statiques : Méthodes avec un corps qui appartiennent à la classe d'interface elle-même.
Exemples
Exemple 1 : Interface de base
interface Animal {
void eat();
void sleep();
}
class Dog implements Animal {
public void eat() {
System.out.println("Dog is eating");
}
public void sleep() {
System.out.println("Dog is sleeping");
}
}
public class InterfaceExample {
public static void main(String[] args) {
Dog dog = new Dog();
dog.eat();
dog.sleep();
}
}
Dans cet exemple, l'interface Animal
déclare deux méthodes abstraites : eat
et sleep
. La classe Dog
implémente l'interface Animal
et fournit des implémentations concrètes pour ces méthodes.
Exemple 2 : Interface avec méthode par défaut
interface Vehicle {
void start();
default void stop() {
System.out.println("Vehicle is stopping");
}
}
class Car implements Vehicle {
public void start() {
System.out.println("Car is starting");
}
}
public class DefaultMethodExample {
public static void main(String[] args) {
Car car = new Car();
car.start();
car.stop();
}
}
Ici, l'interface Vehicle
comprend une méthode par défaut stop
. La classe Car
implémente l'interface Vehicle
et fournit une implémentation de la méthode start
. La méthode par défaut stop
est héritée et peut être utilisée telle quelle.
Exemple 3 : Interface avec méthode statique
interface Calculator {
static int add(int a, int b) {
return a + b;
}
}
public class StaticMethodExample {
public static void main(String[] args) {
int result = Calculator.add(5, 3);
System.out.println("Sum: " + result);
}
}
Cet exemple montre une interface Calculator
avec une méthode statique add
. La méthode statique peut être appelée directement en utilisant le nom de l'interface sans avoir besoin d'une instance.
Conseils et bonnes pratiques
- Responsabilité unique: Gardez les interfaces concentrées sur une seule responsabilité. Ils sont ainsi plus faciles à comprendre et à mettre en œuvre.
- Conventions d'appellation: Utilisez des noms significatifs pour les interfaces. Souvent, les noms d'interface sont des adjectifs ou des noms qui décrivent le comportement ou le rôle, comme
Runnable
,Serializable
, ouList
. - Évitez la surcharge: Évitez de surcharger les méthodes dans les interfaces afin de préserver la clarté et la simplicité.
- Utilisez les méthodes par défaut à bon escient: Les méthodes par défaut peuvent être utiles pour assurer la compatibilité ascendante, mais utilisez-les avec parcimonie pour éviter de compliquer l'interface.
- Interfaces de documents: Documentez clairement l'objectif et le comportement attendu de chaque méthode de l'interface afin de guider les personnes chargées de la mise en œuvre.
- Préférez la composition à l'héritage: Utilisez des interfaces pour définir les capacités et préférez la composition à l'héritage pour obtenir un code flexible et facile à maintenir.
Concepts supplémentaires
Interfaces multiples
En Java, une classe peut implémenter plusieurs interfaces, ce qui lui permet d'hériter des méthodes abstraites de toutes les interfaces implémentées.
interface Movable {
void move();
}
interface Stoppable {
void stop();
}
class Robot implements Movable, Stoppable {
public void move() {
System.out.println("Robot is moving");
}
public void stop() {
System.out.println("Robot has stopped");
}
}
public class MultipleInterfacesExample {
public static void main(String[] args) {
Robot robot = new Robot();
robot.move();
robot.stop();
}
}
Dans cet exemple, la classe Robot
met en œuvre les interfaces Movable
et Stoppable
, en fournissant des implémentations pour les méthodes définies dans les deux interfaces.