logo

Diferència entre classe abstracta i interfície

La classe abstracta i la interfície s'utilitzen per aconseguir l'abstracció on podem declarar els mètodes abstractes. La classe abstracta i la interfície no es poden instanciar.

fitxer java obert

Però hi ha moltes diferències entre la classe abstracta i la interfície que es donen a continuació.

Classe abstractaInterfície
1) Classe abstracta pot tenen abstracte i no abstracte mètodes.La interfície pot tenir només abstracte mètodes. Des de Java 8, pot tenir mètodes per defecte i estàtics també.
2) Classe abstracta no admet l'herència múltiple .Interfície suporta l'herència múltiple .
3) Classe abstracta pot tenir variables finals, no finals, estàtiques i no estàtiques .La interfície té només variables estàtiques i finals .
4) Classe abstracta pot proporcionar la implementació de la interfície .Interfície no pot proporcionar la implementació de la classe abstracta .
5) El paraula clau abstracta s'utilitza per declarar classe abstracta.El paraula clau de la interfície s'utilitza per declarar la interfície.
6) An classe abstracta pot ampliar una altra classe Java i implementar múltiples interfícies Java.An interfície només pot ampliar una altra interfície Java.
7) An classe abstracta es pot ampliar amb la paraula clau 'estén'.An interfície es pot implementar mitjançant la paraula clau 'implements'.
8) A Java classe abstracta pot tenir membres de classe com privats, protegits, etc.Els membres d'una interfície Java són públics per defecte.
9) Exemple:
classe abstracta pública Forma{
public abstract void draw();
}
Exemple:
interfície pública Dibuixable{
void draw();
}

Simplement, la classe abstracta aconsegueix una abstracció parcial (del 0 al 100%), mentre que la interfície aconsegueix una abstracció total (100%).

Exemple de classe abstracta i interfície en Java

Vegem un exemple senzill on utilitzem la interfície i la classe abstracta.

què és l'exportació a linux
 //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(); }} 
Prova-ho ara

Sortida:

 I am a I am b I am c I am d