20. Razlika između apstraktne klase i interfejsa

Apstraktna klasa i interfejs se koriste za postizanje apstrakcije gdje možemo deklarisati apstraktne metode. Apstraktna klasa i interfejs se ne mogu instancirati.
Ali postoje mnoge razlike između apstraktne klase i interfejsa koje su date u sljedećoj tabeli.

Apstraktna klasa

Interfejs

1) Apstraktna klasa može imati apstraktne i ne-apstraktne metode.

Interfejs može imati samo apstraktne metode.

2) Apstraktna klasa ne podržava višestruko nasljeđivanje.

Interfejs podržava višestruko nasljeđivanje.

3) Apstraktna klasa može imati final, non-final, static i non-static varijable.

Interfejs ima samo static i final varijable.

4) Apstraktna klasa može imati static metode, main metod i konstruktor.

Interfejs ne može imati static metode, main metod ili konstruktor.

5) Apstraktna klasa može obezbijediti implementaciju interfejsa.

Interfejs ne može obezbijediti implementaciju apstraktne klase.

6) Ključna riječ abstract se koristi da deklariše apstraktnu klasu.

Ključna riječ interface se koristi da deklariše interfejs.

7) Primjer:
public class Shape{
public abstract void draw();
}

Primjer:
public interface Drawable{
void draw();
}

Jednostavno, apstraktna klasa postiže djelimičnu apstrakciju (0 do 100%) dok interfejs postiže punu apstrakciju (100%).
Primjer apstraktne klase i interfejsa u javi

Pogledajmo jednostavan primjer gdje koristimo i interfejs i apstraktnu klasu.

//Kreiranje interfejsa koji ima 4 metoda  
interface A{  
void a(); //po default-u, public i abstract  
void b();  
void c();  
void d();  
}  
  
//Kreiranje apstraktne klase koja obezbjeđuje implementaciju jednog metoda A interfejsa  
abstract class B implements A{  
public void c(){System.out.println("I am C");}  
}  
  
//Kreiranje podklase apstraktne klase, sada trebamo da obezbijedimo implementaciju ostalih //metoda  
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");}  
}  
  
//Kreiranje test klase koja poziva metode A interfejsa  
class Test5{  
public static void main(String args[]){  
A a=new M();  
a.a();  
a.b();  
a.c();  
a.d();  
}}

Ispis na ekranu:
I am a
I am b
I am c
I am d


Objektno orijentisano programiranje u Javi    Index