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

Klasa abstrakcyjna i interfejs są używane przede wszystkim do abstrakcji, jednak bardzo się od siebie różnią. Oba są podstawową częścią Java, ale mają własne zastosowania aplikacji. Chociaż oba terminy mogą być ze sobą synonimami, nie można ich używać zamiennie.

Istnieją znaczne różnice między nimi. Chociaż metoda interfejsu jest domyślnie abstrakcyjna, może ona zawierać zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Cóż, od Java 8 interfejsy mają również implementacje metod i mogą mieć zarówno statyczne, jak i domyślne metody w Javie. Przyjrzyjmy się szczegółowo różnicy między nimi.

Co to jest klasa abstrakcyjna w Javie?

Klasa abstrakcyjna w Javie jest klasą zadeklarowaną jako abstrakcyjna - może zawierać metody abstrakcyjne lub nie. Jest dość podobny do interfejsu Java, z tym wyjątkiem, że może zawierać domyślną implementację metody. Podobnie jak w programowaniu obiektowym, abstrakcję w Javie uzyskuje się za pomocą klas abstrakcyjnych i interfejsów. W Javie abstrakcja oznacza ukrywanie nieistotnych szczegółów przed użytkownikiem, aby skupić się tylko na istotnych szczegółach w celu zwiększenia wydajności, a tym samym zmniejszenia złożoności. Słowo kluczowe „abstract” służy do utworzenia klasy abstrakcyjnej tuż przed słowem kluczowym class w deklaracji klasy.

Klasa abstrakcyjna może zawierać metody abstrakcji (metody bez treści), ale jeśli klasa ma co najmniej jedną metodę abstrakcji, musi zostać uznana za abstrakcyjną. Jednak metody nieabstrakcyjne mogą być również używane tylko w klasie abstrakcyjnej, ale tylko w celu zaimplementowania domyślnego zachowania. Metody w klasie abstrakcyjnej mogą mieć modyfikatory dostępu, takie jak prywatny, publiczny, statyczny i chroniony, w zależności od poziomu widoczności. Nie można utworzyć instancji klasy abstrakcyjnej i nie zapewnia ona 100-procentowej abstrakcji, ponieważ może mieć konkretną metodę.

Co to jest interfejs?

Interfejs wygląda jednak jak klasa, ale nim nie jest. Ponieważ Java nie obsługuje wielu dziedziczeń, interfejs jest czasem idealny do zapewnienia bazy dla hierarchii klas. Interfejs jest bardziej schematem klasy, która jest również używana do uzyskania abstrakcji w Javie. Zawiera metody abstrakcyjne i stałe statyczne. Mówiąc najprościej, interfejs to zbiór metod abstrakcyjnych, który służy do określania zachowania, które klasa musi wdrożyć. W przeciwieństwie do klasy abstrakcyjnej interfejs zapewnia pełną abstrakcję w Javie. Może mieć zarówno metody, jak i zmienne, podobnie jak klasa, jednak metody zadeklarowane w interfejsie są domyślnie abstrakcyjne.

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

  1. „Wielokrotne dziedziczenie” klasy abstrakcyjnej i interfejsu w Javie - Pomimo faktu, że zarówno klasa abstrakcyjna, jak i interfejs są używane głównie do abstrakcji, różnią się one od siebie. Podczas gdy klasa abstrakcyjna jest klasą, interfejs jest interfejsem. Oznacza to, że chociaż interfejs może rozszerzać tylko inny interfejs Java, klasa abstrakcyjna może implementować wiele dziedziczeń w Javie. Cóż, Java nie obsługuje wielu spadków, ale można zaimplementować wiele spadków w Javie.
  2. „Rodzaj metody” klasy abstrakcyjnej i interfejsu w Javie - Druga główna różnica między nimi polega na tym, że chociaż interfejs może mieć tylko metody abstrakcyjne, klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Jednak od wersji Java 8 interfejs może mieć także metody domyślne i statyczne.
  3. „Modyfikatory dostępu” klasy abstrakcyjnej i interfejsu w Javie - Klasa abstrakcyjna może mieć publiczne, prywatne i chronione modyfikatory dostępu, jednak metody interfejsu są domyślnie publiczne i abstrakcyjne. Nie można używać żadnego innego modyfikatora dostępu z metodami interfejsu ”.
  4. „Implementacja” klasy abstrakcyjnej i interfejsu w Javie - Klasa abstrakcyjna może zapewnić implementację interfejsu. Z drugiej strony interfejs nie może zapewnić implementacji klasy abstrakcyjnej.
  5. „Słowo kluczowe” klasy abstrakcyjnej i interfejsu w Javie- Chociaż słowo „abstrakcyjne” jest używane do deklarowania metody klasy abstrakcyjnej jako abstrakcyjnej, interfejsy są jednak zupełnie inną historią; mogą mieć tylko publiczne, statyczne stałe końcowe i deklaracje metod.
  6. „Użycie” klasy abstrakcyjnej i interfejsu w Javie - Chociaż interfejs jest idealny do deklaracji typu, klasa abstrakcyjna najlepiej nadaje się do ponownego wykorzystania kodu i perspektywy ewolucji. Interfejs wygląda jak klasa, ale to nie jest klasa.
  7. „Niezawodność” klasy abstrakcyjnej i interfejsu w Javie- Inną istotną różnicą między klasą abstrakcyjną a interfejsem jest to, że ta pierwsza jest nieco szybsza niż druga, ponieważ wyszukiwanie jest zwykle zaangażowane w interfejs przed wywołaniem jakiejkolwiek zastąpionej metody w Javie.
  8. „Zmienne końcowe” klasy abstrakcyjnej i interfejsu w Javie - Zmienne zadeklarowane w interfejsie są domyślnie ostateczne, podczas gdy klasa abstrakcyjna może, ale nie musi zawierać zmienne nie-końcowe.

Klasa abstrakcyjna a interfejs w Javie: Tabela porównawcza

Klasa abstrakcyjna Berło
Słowo kluczowe abstrakcyjne służy do tworzenia klasy abstrakcyjnej i może być używane z metodami. Słowo kluczowe interfejs służy do tworzenia interfejsu, ale nie można go używać z metodami.
Klasa może rozszerzyć tylko jedną klasę abstrakcyjną. Klasa może implementować więcej niż jeden interfejs.
Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Interfejs może mieć tylko abstrakcyjne metody.
Zmienne nie są domyślnie ostateczne. Może zawierać zmienne nie ostateczne. Zmienne są domyślnie końcowe w interfejsie.
Klasa abstrakcyjna może zapewnić implementację interfejsu. Interfejs nie może zapewnić implementacji klasy abstrakcyjnej.
Może mieć metody z implementacjami. Zapewnia absolutną abstrakcję i nie może mieć implementacji metod.
Może mieć publiczne, prywatne, statyczne i chronione modyfikatory dostępu. Metody są jawnie jawne i abstrakcyjne w interfejsie Java.
Nie obsługuje wielu spadków. Obsługuje wiele spadków.
Jest idealny do ponownego wykorzystania kodu i perspektywy ewolucji. Jest idealny do deklaracji typu.

Podsumowanie punktów na temat klasy abstrakcyjnej i interfejsu w Javie

Zarówno klasa abstrakcyjna, jak i interfejs są używane do abstrakcji; mają jednak sprawiedliwy udział różnic. Główna różnica między nimi wynika z metod abstrakcji. Podczas gdy te pierwsze mogą, ale nie muszą, mieć metod abstrakcyjnych, drugie są domyślnie abstrakcyjne. Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Z drugiej strony interfejs może mieć tylko metody abstrakcyjne, dlatego nie może mieć implementacji, co po prostu oznacza, że ​​interfejs nie może mieć metod nieabstrakcyjnych. Nie można utworzyć instancji klasy abstrakcyjnej, co zabrania tworzenia obiektu. Z drugiej strony interfejs może wyglądać jak klasa, ale nim nie jest.