Różnice między interfejsem Java a klasą abstrakcyjną

Interfejs określi, co klasa musi zrobić, ale nie w jaki sposób. Zasadniczo jest to plan dla klasy. Zmienne zadeklarowane w interfejsie są domyślnie publiczne, statyczne i końcowe. Klasa zadeklarowana za pomocą słowa kluczowego „streszczenie” nazywana jest klasą abstrakcyjną Klasa wywodząca się z klasy Abstract musi definiować wszystkie metody, które są zadeklarowane jako abstract w klasie abstrakcyjnej.

Co to jest interfejs?

Interfejs jest jak klasa, ale nie jest tym, który może mieć metody i zmienne jako klasę, ale metody zadeklarowane w interfejsie są domyślnie abstrakcyjne. Interfejs służy do zapewnienia pełnej abstrakcji, ponieważ metody w interfejsach nie mają treści. Dlatego muszą zostać zaimplementowane przez klasę przed próbą uzyskania do nich dostępu. Ogólnie klasa, która implementuje interfejs, musi zdefiniować wszystkie metody zadeklarowane w interfejsie, jeśli tak nie jest, wówczas klasę należy zadeklarować jako abstrakcyjną. Nie możemy rozszerzyć interfejsu na więcej niż jedną klasę, ponieważ Java na to nie pozwala. Aby zadeklarować interfejs, musimy użyć słowa kluczowego interface i aby wdrożyć interfejs, musimy użyć słowa kluczowego implements.

Co to jest streszczenie?

Klasa zadeklarowana przez słowo kluczowe „streszczenie” nazywa się klasą abstrakcyjną. Klasa Abstract może mieć metody abstrakcyjne (metoda bez ciała) i konkretne metody (metoda z ciałem), w przeciwieństwie do normalnej klasy. Nie można utworzyć instancji klasy abstrakcyjnej, tzn. Nie możemy utworzyć dla niej obiektu, ale możemy mieć odniesienia do klasy abstrakcyjnej, tworząc inną klasę, która rozszerza klasę abstrakcyjną i zapewnia implementację metod. Możemy użyć obiektu dziecka (który jest nowo utworzony) do wywołania metod abstrakcyjnych i normalnych. Może mieć konstruktory, a klasa abstrakcyjna jest wywoływana podczas tworzenia dziedziczonej instancji klasy. W Javie możemy mieć klasę abstrakcyjną bez abstrakcyjnego słowa kluczowego, ale nie można tworzyć instancji, tylko dziedziczone i mogą mieć również metody końcowe.

Bezpośrednie porównanie między interfejsem Java a klasą abstrakcyjną (infografiki)

Poniżej znajduje się 9 najlepszych porównań między interfejsem Java a klasą abstrakcyjną

Kluczowe różnice między interfejsem Java a klasą abstrakcyjną

Zarówno interfejs Java, jak i klasa abstrakcyjna są popularnymi wyborami na rynku; omówmy niektóre z głównych różnic między interfejsem Java a klasą abstrakcyjną:

  • Interfejs może być wykorzystany do osiągnięcia wielu spadków i luźnych powiązań, których nie jesteśmy w stanie osiągnąć za pomocą klasy abstrakcyjnej.
  • Interfejs używany do osiągnięcia całkowitej abstrakcji, podczas gdy klasa abstrakcyjna może osiągnąć abstrakcję częściową.
  • Klasa abstrakcyjna rozszerza tylko jedną klasę normalną lub klasę abstrakcyjną na raz, podczas gdy interfejs może rozszerzać dowolną liczbę interfejsów jednocześnie.
  • Klasa abstrakcyjna rozszerza inną klasę abstrakcyjną lub normalną, podczas gdy interfejs może rozszerzać tylko inny interfejs Java.
  • W klasie abstrakcyjnej musimy deklarować metody za pomocą słowa kluczowego „abstract”, natomiast w interfejsie możemy deklarować metody ze słowem kluczowym „abstract” lub bez niego.
  • Interfejs może mieć tylko metody abstrakcyjne, podczas gdy klasa abstrakcyjna może mieć zarówno klasy abstrakcyjne, jak i normalne.
  • Klasa abstrakcyjna może mieć różne zmienne, takie jak statyczna, końcowa, niekończąca, niestatyczna, publiczna, prywatna itp., Natomiast interfejs może mieć tylko zmienne publiczne, statyczne i końcowe.
  • Klasa abstrakcyjna i jej metody mogą być tworzone za pomocą słowa kluczowego „abstract”, podczas gdy słowo kluczowe interface służy do tworzenia interfejsu, ale nie metod.
  • Klasa abstrakcyjna może mieć konstruktory, podczas gdy interfejs nie ma konstruktora.
  • Klasa abstrakcyjna służy do definiowania kontraktu, implementacji metody dla podklasy, natomiast interfejs służy do definiowania kontraktu dla podklas.
  • Interfejs może rozszerzać tylko inne interfejsy Java, podczas gdy klasa abstrakcyjna może rozszerzać inne klasy i implementować również interfejs.
  • Klasa, która rozszerza klasę abstrakcyjną za pomocą słowa kluczowego extends, musi implementować wszystkie metody zadeklarowane w klasie abstrakcyjnej, chyba że klasa jest także klasą abstrakcyjną, podczas gdy klasa implementująca interfejs za pomocą słowa kluczowego interface zapewnia również implementację dla wszystkich metod zadeklarowanych w interfejsie.

Tabela porównawcza Interfejs Java kontra klasa abstrakcyjna

Poniżej znajduje się tabela porównawcza Między interfejsem Java a klasą abstrakcyjną

Podstawy porównania między interfejsem Java a klasą abstrakcyjnąKlasa abstrakcyjnaInterfejs Java
Rodzaj metodyKlasa Abstract może mieć zarówno metody abstrakcyjne (metody bez treści), jak i nieabstrakcyjne (metody z treścią)W interfejsie możemy mieć tylko metody abstrakcyjne. W Javie 8 interfejs może także mieć metody statyczne i domyślne
SkładniaKlasa abstrakcyjna może być zadeklarowana w następujący sposób:
public abstract class school (Publiczne abstrakcyjne klasy nieważne ();
public abstract void strength ();)
Interfejs można zadeklarować w następujący sposób:
kształt interfejsu publicznego (Void draw_rect (); Void draw_square ();)
Zmienna końcowaKlasa abstrakcyjna może mieć zmienne końcowe i nie-końcowe.Interfejs może mieć tylko zmienne końcowe, ponieważ zmienne są domyślnie końcowe w interfejsie.
RealizacjaKlasa abstrakcyjna może zapewnić implementację wszystkich metod abstrakcyjnych w interfejsie.Natomiast w interfejsie nie możemy zapewnić implementacji klasy abstrakcyjnej.
Typ zmiennejKlasa abstrakcyjna może obejmować wszystkie typy zmiennych, tj. Końcową, nieokreśloną, statyczną, niestatyczną, prywatną, publiczną itp.Interfejs może mieć tylko zmienne publiczne, statyczne i końcowe.
Członkowie danych DostępnośćKlasa abstrakcyjna może mieć członków klasy jako prywatny, chroniony, publiczny itp.Interfejs może mieć tylko członków klasy publicznej, ponieważ elementy danych interfejsu są domyślnie publiczne.
Dziedziczenie a abstrakcjaKlasa abstrakcyjna może zostać rozszerzona za pomocą słowa kluczowego „extends” i musi zapewniać implementację wszystkich zadeklarowanych metod w klasie nadrzędnej lub klasie abstrakcyjnejInterfejs można zaimplementować za pomocą słowa kluczowego „interfejs” i należy zapewnić implementację wszystkich metod zadeklarowanych w interfejsie
Wiele realizacjiKlasa abstrakcyjna może rozszerzyć inną klasę Java implementującą wiele interfejsówInterfejs może rozszerzyć tylko inny interfejs.
Kiedy użyćKlasa abstrakcyjna musi być używana, gdy niektóre klasy muszą dzielić kilka wierszy kodu, a następnie możemy umieścić ten kod w klasie abstrakcyjnej i rozszerzyć o wszystkie klasy pokrewne.Interfejs może być używany, gdy musimy osiągnąć wiele dziedziczeń, pełną abstrakcję poprzez wdrożenie wszystkich metod zadeklarowanych w interfejsie przez klasę, która implementuje interfejs.

Wniosek - interfejs Java a klasa abstrakcyjna

Wreszcie jest to przegląd różnicy między interfejsem Java a klasą abstrakcyjną. Mam nadzieję, że lepiej zrozumiesz te koncepcje interfejsu Java vs. Klasa abstrakcyjna. W oparciu o nasze wymagania możemy jednocześnie używać interfejsu Java vs Klasa abstrakcyjna, tylko interfejs i tylko klasa abstrakcyjna. Ale jednoczesne użycie interfejsów i klasy abstrakcyjnej to najlepsze podejście do projektowania. Gdy klasa musi współdzielić jakiś kod, możemy umieścić ten kod w klasie abstrakcyjnej, a gdy wymagany jest stan obiektu, możemy to uzyskać poprzez zdefiniowanie pól niestatycznych lub niekończących, a następnie możemy użyć klasy abstrakcyjnej. Możemy użyć interfejsu, gdy potrzebujemy pełnej abstrakcji, wielokrotnego dziedziczenia i luźnego sprzężenia.

Polecany artykuł

Jest to przewodnik po najważniejszych różnicach między interfejsem Java a klasą abstrakcyjną. W tym miejscu omawiamy także różnice między kluczem Java Interface a klasą abstrakcyjną za pomocą infografiki i tabeli porównawczej. Możesz także zapoznać się z następującymi artykułami -

  1. Jak przydatne są pytania i odpowiedzi do wywiadu w języku C #?
  2. 8 Przydatne porównanie - HTML5 vs Flash
  3. Java vs C # - 8 Ważne różnice
  4. Ruby vs Węzeł
  5. Porównanie HTML5 a JavaScript
  6. ArrayList vs Java Vector