Zarówno klasa abstrakcyjna, jak i interfejs służą do osiągnięcia abstrakcji, w której możemy zadeklarować metody abstrakcyjne. Nie można utworzyć instancji klasy abstrakcyjnej i interfejsu.
Istnieje jednak wiele różnic między klasą abstrakcyjną a interfejsem, które podano poniżej.
Klasa abstrakcyjna | Interfejs |
---|---|
1) Klasa abstrakcyjna może mają charakter abstrakcyjny i nieabstrakcyjny metody. | Interfejs może mieć tylko abstrakcja metody. Od wersji Java 8 może to mieć metody domyślne i statyczne Również. |
2) Klasa abstrakcyjna nie obsługuje dziedziczenia wielokrotnego . | Interfejs obsługuje dziedziczenie wielokrotne . |
3) Klasa abstrakcyjna może mieć zmienne końcowe, niekońcowe, statyczne i niestatyczne . | Interfejs ma tylko zmienne statyczne i końcowe . |
4) Klasa abstrakcyjna może zapewnić implementację interfejsu . | Interfejs nie można zapewnić implementacji klasy abstrakcyjnej . |
5) abstrakcyjne słowo kluczowe służy do deklarowania klasy abstrakcyjnej. | The słowo kluczowe interfejsu służy do deklarowania interfejsu. |
6) An klasa abstrakcyjna może rozszerzyć inną klasę Java i zaimplementować wiele interfejsów Java. | Jakiś interfejs może rozszerzyć tylko inny interfejs Java. |
7) An klasa abstrakcyjna można rozszerzyć za pomocą słowa kluczowego „rozszerza”. | Jakiś interfejs można wdrożyć za pomocą słowa kluczowego „implementy”. |
8) Do Javy klasa abstrakcyjna może mieć członków klasy, takich jak prywatny, chroniony itp. | Elementy interfejsu Java są domyślnie publiczne. |
9) Przykład: publiczna klasa abstrakcyjna Kształt{ publiczna abstrakcja void losowanie(); } | Przykład: interfejs publiczny Możliwość rysowania{ puste losowanie(); } |
Po prostu klasa abstrakcyjna osiąga częściową abstrakcję (0 do 100%), podczas gdy interfejs osiąga pełną abstrakcję (100%).
Przykład klasy abstrakcyjnej i interfejsu w Javie
Zobaczmy prosty przykład, w którym używamy zarówno interfejsu, jak i klasy abstrakcyjnej.
//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(); }}Przetestuj teraz
Wyjście:
I am a I am b I am c I am d