logo

Różnica między klasą abstrakcyjną a interfejsem

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 abstrakcyjnaInterfejs
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