Razlika između apstraktne klase i interfejsa
Apstraktna klasa i interfejs se koriste za postizanje apstrakcije gde 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 sledećoj tabeli:
Jednostavno, apstraktna klasa postiže delimičnu apstrakciju (0 do 100%) dok interfejs postiže punu apstrakciju (100%).
Primer apstraktne klase i interfejsa u Javi
Pogledajmo jednostavan primer gde koristimo i interfejs i apstraktnu klasu:
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 nasleđivanje. | Interfejs podržava višestruko nasleđivanje. |
3) Apstraktna klasa može imati final, non-final, static i non-static promenljive. | Interfejs ima samo static i final promenljive. |
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 obezbediti implementaciju interfejsa. | Interfejs ne može obezbediti implementaciju apstraktne klase. |
6) Ključna reč abstract se koristi da deklariše apstraktnu klasu. | Ključna reč interface se koristi da deklariše interfejs. |
7) Primer: public class Shape{ public abstract void draw(); } | Primer: public interface Drawable{ void draw(); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 |
//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 obezbeđ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 obezbedimo 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 |