logo

Diferența dintre clasa abstractă și interfață

Clasa abstractă și interfața sunt folosite ambele pentru a realiza abstractizarea unde putem declara metodele abstracte. Clasa abstractă și interfața nu pot fi instanțiate.

Dar există multe diferențe între clasa abstractă și interfață care sunt prezentate mai jos.

Clasa abstracteInterfață
1) Clasa abstractă poate au abstract și non-abstract metode.Interfața poate avea doar abstract metode. Din Java 8, poate avea metode implicite și statice de asemenea.
2) Clasa abstracte nu acceptă moștenirea multiplă .Interfață suportă moștenirea multiplă .
3) Clasa abstracte poate avea variabile finale, nefinale, statice și nestatice .Interfața are numai variabile statice și finale .
4) Clasa abstracte poate oferi implementarea interfeței .Interfață nu poate furniza implementarea clasei abstracte .
5) Cel cuvânt cheie abstract este folosit pentru a declara o clasă abstractă.The cuvânt cheie interfață este folosit pentru a declara interfața.
6) An clasa abstractă poate extinde o altă clasă Java și poate implementa mai multe interfețe Java.Un interfata poate extinde doar o altă interfață Java.
7) An clasa abstractă poate fi extins folosind cuvântul cheie „extends”.Un interfata poate fi implementat folosind cuvântul cheie „implemente”.
8) La Java clasa abstractă poate avea membri ai clasei ca privat, protejat etc.Membrii unei interfețe Java sunt publici în mod implicit.
9) Exemplu:
clasă abstractă publică Shape{
public abstract void draw();
}
Exemplu:
interfață publică Drawable{
void draw();
}

Pur și simplu, clasa abstractă realizează o abstracție parțială (de la 0 la 100%), în timp ce interfața realizează o abstracție completă (100%).

Exemplu de clasă abstractă și interfață în Java

Să vedem un exemplu simplu în care folosim atât interfața, cât și clasa abstractă.

 //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(); }} 
Testează-l acum

Ieșire:

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