La classe abstraite et l'interface sont toutes deux utilisées pour réaliser une abstraction où nous pouvons déclarer les méthodes abstraites. La classe abstraite et l’interface ne peuvent pas être instanciées.
Mais il existe de nombreuses différences entre la classe abstraite et l’interface, indiquées ci-dessous.
Classe abstraite | Interface |
---|---|
1) La classe abstraite peut avoir abstrait et non abstrait méthodes. | L'interface peut avoir seulement abstrait méthodes. Depuis Java 8, il peut avoir méthodes par défaut et statiques aussi. |
2) Classe abstraite ne prend pas en charge l'héritage multiple . | Interface prend en charge l'héritage multiple . |
3) Classe abstraite peut avoir des variables finales, non finales, statiques et non statiques . | L'interface a uniquement les variables statiques et finales . |
4) Classe abstraite peut fournir la mise en œuvre de l'interface . | Interface ne peut pas fournir l'implémentation d'une classe abstraite . |
5) Le mot-clé abstrait est utilisé pour déclarer une classe abstraite. | Le mot-clé de l'interface est utilisé pour déclarer l'interface. |
6) Un classe abstraite peut étendre une autre classe Java et implémenter plusieurs interfaces Java. | Un interface peut étendre une autre interface Java uniquement. |
7) Un classe abstraite peut être étendu à l'aide du mot-clé « étend ». | Un interface peut être implémenté à l'aide du mot-clé « impléments ». |
8) Vers Java classe abstraite peut avoir des membres de classe comme privés, protégés, etc. | Les membres d'une interface Java sont publics par défaut. |
9) Exemple: classe abstraite publique Shape{ public abstract void draw(); } | Exemple: interface publique Drawable{ void draw(); } |
Simplement, la classe abstraite réalise une abstraction partielle (0 à 100 %) alors que l'interface réalise une abstraction totale (100 %).
Exemple de classe abstraite et d'interface en Java
Voyons un exemple simple dans lequel nous utilisons à la fois une interface et une classe abstraite.
//Creating interface that has 4 methods interface A{ void a();//bydefault, public and abstract void b(); void c(); void d(); } //Creating abstract class that provides the implementation of one method of A interface abstract class B implements A{ public void c(){System.out.println('I am C');} } //Creating subclass of abstract class, now we need to provide the implementation of rest of the methods class M extends B{ public void a(){System.out.println('I am a');} public void b(){System.out.println('I am b');} public void d(){System.out.println('I am d');} } //Creating a test class that calls the methods of A interface class Test5{ public static void main(String args[]){ A a=new M(); a.a(); a.b(); a.c(); a.d(); }}Testez-le maintenant
Sortir:
I am a I am b I am c I am d