Faire la différence entre les classes abstraites et les interfaces en Java
Classes abstraites
Une classe abstraite est une classe qui ne peut pas être instanciée. Elle sert de modèle pour ses sous-classes. Une classe abstraite peut contenir à la fois des méthodes concrètes (avec du code) et des méthodes abstraites (sans corps). Les méthodes abstraites sont déclarées avec le mot-clé abstract et doivent être implémentées par toute sous-classe.
public abstract class Animal {
public abstract void manger();
public void dormir() {
System.out.println("L'animal dort");
}
}
Interfaces
Une interface est une collection de méthodes abstraites et de constantes. Toutes les méthodes d’une interface sont implicitement public et abstract. Les interfaces sont utilisées pour définir un contrat pour les classes.
public interface Animal {
void manger();
}
Différences clés
-
Méthodes : Les classes abstraites peuvent avoir des méthodes avec du code, tandis que toutes les méthodes d’une interface sont abstraites et ne contiennent pas de code.
-
Variables : Les interfaces ne contiennent jamais de variables d’instance, mais peuvent contenir des variables
public static final. -
Héritage multiple : En Java, une classe peut implémenter plusieurs interfaces, ce qui permet un type d’héritage multiple. En revanche, une classe ne peut hériter que d’une seule classe ou classe abstraite à la fois.
-
Abstraction : Une interface fournit une abstraction complète car elle ne peut contenir que des méthodes abstraites. Une classe abstraite, en revanche, peut contenir à la fois des méthodes concrètes et abstraites, offrant ainsi un niveau d’abstraction partiel.
Ce qu'il faut retenir
Le choix entre l’utilisation d’une classe abstraite et d’une interface dépend des besoins spécifiques de votre programme. Les classes abstraites sont généralement utilisées lorsque différentes implémentations partageront du code commun, tandis que les interfaces sont bénéfiques lorsque les mêmes méthodes doivent être implémentées de différentes manières par différentes classes.