(1) Les classes abstraites et les interfaces peuvent avoir des méthodes abstraites.
(2) Les interfaces ne peuvent avoir que des constantes, pas des variables, tandis que les classes abstraites peuvent avoir à la fois des constantes et des variables.
(3) Les classes abstraites peuvent également avoir des méthodes non abstraites, mais pas les interfaces.
Lors de la conception d'un programme, vous devez déterminer s'il convient d'utiliser des classes abstraites ou des interfaces basées sur une analyse spécifique. En plus de fournir des méthodes abstraites importantes qui doivent être remplacées par les sous-classes, les classes abstraites fournissent également des variables et des méthodes non abstraites dont les sous-classes peuvent hériter.
Si un certain problème doit être mieux résolu en utilisant l'héritage, par exemple : en plus de remplacer la méthode abstraite de la classe parent, la sous-classe doit également hériter de certaines variables ou hériter de certaines méthodes non abstraites importantes de la classe parent, vous pouvez pensez à utiliser un type abstrait. Si un certain problème ne nécessite pas d'héritage, mais nécessite seulement plusieurs classes pour fournir les détails d'implémentation de certaines méthodes abstraites importantes, vous pouvez envisager d'utiliser des interfaces.
Remarque : l'interface JDK1.8 prend en charge les méthodes statiques et les méthodes par défaut.
1) Les interfaces ne peuvent pas être utilisées pour instancier des objets.
2) L'interface n'a pas de méthode constructeur.
3) Toutes les méthodes de l'interface doivent être des méthodes abstraites.
4) Les interfaces ne peuvent pas contenir de variables membres, à l'exception des variables statiques et finales.
5) L'interface n'est pas héritée par la classe, mais implémentée par la classe.
6) L'interface prend en charge l'héritage multiple.
La méthode par défaut signifie que l'interface peut avoir des méthodes d'implémentation et n'a pas besoin d'une classe d'implémentation pour implémenter ses méthodes. Il vous suffit d'ajouter le mot-clé default devant le nom de la méthode pour implémenter la méthode par défaut. Les méthodes par défaut permettent d'étendre une interface sans casser le code existant.
(1) Une interface peut avoir plusieurs méthodes par défaut et méthodes statiques.
(2) La méthode par défaut est appelée via l'instance et la méthode statique est appelée via le nom de l'interface.
(3) Le mot-clé par défaut ne peut être utilisé que dans les interfaces.
(4) Les méthodes par défaut peuvent être héritées. Si vous héritez de plusieurs interfaces et que plusieurs interfaces définissent plusieurs mêmes méthodes par défaut, la classe d'implémentation doit remplacer les méthodes par défaut, sinon une erreur sera signalée.
(5) Les méthodes statiques ne peuvent pas être héritées ni remplacées, elles ne peuvent donc être appelées que par l'interface spécifique.
Remarque : Après JDK 1.9, les méthodes peuvent être définies comme privées, afin que certains codes réutilisés n'exposent pas les méthodes.