Un interface représente un contrat.
Une classe abstrait représente, une ébauche de classe, une ossature avec un comportement de base.
Les interfaces sont à utiliser quand tu ne veux pas coupler ce qui utilise ton interface et ce qui l'implémente.
Un cas typique est la déclaration des listes en Java.
List<String> mesCodes = new AbstractList<String>();
Il faut savoir que ArrayList hérite directement de AbstractList qui implémente l'interface List.
L'utilité de la classe abstraite AbstractList, c'est que son comportement de base peut-être réutilisé pour d'autre implémentation (ce qui est le ça avec la classe Vector).
Donc, les classes abstraits sont à utiliser lorsque tu veux isoler un comportement, malgré le fait que celui-ci n'est pas suffisant pour être utilisable.
D'ailleurs si tu regarde le code source de cette classe tu as :
1 2 3 4 5 6 7 8 9
|
public boolean add(E e) {
add(size(), e);
return true;
}
public void add(int index, E element) {
throw new UnsupportedOperationException();
} |
Cela évite d'avoir à redéfinir des évidences pour les réels implémentations qui n'auront plus qu'à faire ce qui leur est particulier.
Si tu fait un classe abstraite c'est qu'à un moment donnée tu compte faire deux classes enfants se basant sur ce comportement.
Cordialement,
Patrick Kolodziejczyk.
source :
https://docs.oracle.com/javase/7/doc...tractList.html
https://docs.oracle.com/javase/7/doc...ArrayList.html
(pour les sources, celles-ci sont présent dans le src.zip de l'installe d'un JDK)
Partager