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 abstracta | Interfí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