Klasa abstrakcyjna i interfejs w Javie

Anonim

Klasa abstrakcyjna i interfejs są używane przede wszystkim do abstrakcji, jednak bardzo się od siebie różnią. Obie są rdzeniem Java, ale mają własne zastosowania aplikacji. Chociaż oba terminy mogą być synonimami, nie mogą być używane zamiennie.

Istnieją znaczne różnice między tymi dwoma. Chociaż metoda interfejsu jest domyślnie abstrakcyjna, streszczenie może zawierać zarówno metody abstrakcyjne, jak i nie abstrakcyjne. Od wersji Java 8 interfejsy mają również implementacje metod i mogą mieć zarówno metody statyczne, jak i domyślne w Javie. Przyjrzyjmy się różnicy między tymi dwoma w szczegółach.

Co to jest Klasa abstrakcyjna w Javie?

Klasa abstrakcyjna w języku Java jest klasą, która jest uznawana za abstrakcyjną - może zawierać lub nie zawierać metod abstrakcyjnych. Jest dość podobny do interfejsu Java, z tym wyjątkiem, że może zawierać domyślną implementację metody. Podobnie jak w programowaniu obiektowym, abstrakcja w Javie jest uzyskiwana za pomocą abstrakcyjnych klas i interfejsów. W języku Java abstrakcja oznacza ukrywanie nieistotnych szczegółów od użytkownika, aby skupić się tylko na istotnych szczegółach, aby zwiększyć wydajność, a tym samym zmniejszyć złożoność. Słowo kluczowe "streszczenie" służy do tworzenia klasy abstrakcyjnej tuż przed słowem kluczowym klasy w deklaracji klasy.

Klasa abstrakcyjna może zawierać lub nie zawierać metod abstrakcji (metody bez treści), ale jeśli klasa ma co najmniej jedną metodę abstrakcji, musi zostać zadeklarowana jako abstrakcyjna. Jednak metody nie abstrakcyjne mogą być 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 prywatne, publiczne, statyczne i chronione, w zależności od poziomu widoczności. Klasa abstrakcyjna nie może być utworzona i nie zapewnia 100% abstrakcji ze względu na fakt, że może ona mieć konkretną metodę.

Czym jest interfejs?

Interfejs wygląda jednak jak klasa, nie jest. Ponieważ Java nie obsługuje wielu dziedziczeń, interfejs jest czasem idealny do zapewnienia podstaw hierarchii klas. Interfejs jest raczej projektem klasy, który jest również używany do uzyskania abstrakcji w Javie. Zawiera abstrakcyjne metody i statyczne stałe. Mówiąc najprościej, interfejs to zbiór abstrakcyjnych metod służących do określania zachowania, które klasa musi implementować. 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. "Wiele dziedziczenia" klasy abstrakcyjnej i interfejsu w Javie - Mimo że zarówno klasa abstrakcyjna, jak i interfejs są używane przede wszystkim do abstrakcji, różnią się od siebie. Podczas gdy klasa abstrakcyjna jest klasą, interfejs jest interfejsem. Oznacza to, że interfejs może tylko rozszerzyć interfejs Java, klasa abstrakcyjna może implementować wiele dziedziczeń w Javie. Cóż, Java nie obsługuje wielu dziedziczeń, ale można wdrożyć wiele dziedziczenia w Javie.
  2. "Typ metody" klasy abstrakcyjnej i interfejsu w języku Java - Drugą główną różnicą między tymi dwoma jest to, że podczas gdy interfejs może mieć jedynie metody abstrakcyjne, klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nie abstrakcyjne. Jednak od wersji Java 8 interfejs może również mieć domyślne i statyczne metody.
  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ą jawnie publiczne i abstrakcyjne. Nie możesz użyć żadnego innego modyfikatora dostępu za pomocą metod 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- O ile słowo "abstract" służy do deklarowania abstrakcyjnej metody klasy abstrakcyjnej, to jednak interfejsy są zupełnie inną historią; mogą mieć tylko publiczne, statyczne stałe końcowe i deklaracje metod.
  6. "Użyj" 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 nie jest klasą.
  7. "Niezawodność" klasy abstrakcyjnej i interfejsu w Javie- Inną ważną różnicą między klasą abstrakcyjną a interfejsem jest to, że pierwsza jest nieco szybsza od drugiej, ponieważ wyszukiwanie jest zazwyczaj związane z interfejsem, zanim jakakolwiek nadpisana metoda zostanie wywołana w Javie.
  8. "Final Variables" klasy abstrakcyjnej i interfejsu w Javie - Zmienne zadeklarowane w interfejsie są domyślnie końcowe, a klasa abstrakcyjna może zawierać lub nie zawierać zmiennych nieostatnich.

Interfejs abstrakcyjnej klasy vs w Javie: Tabela porównawcza

Klasa abstrakcyjna Berło
Słowo kluczowe abstract służy do tworzenia klasy abstrakcyjnej i może być używane z metodami. Słowo kluczowe interfejsu służy do tworzenia interfejsu, ale nie można go używać z metodami.
Klasa może obejmować tylko jedną klasę abstrakcyjną. Klasa może implementować więcej niż jeden interfejs.
Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nie abstrakcyjne. Interfejs może mieć tylko abstrakcyjne metody.
Zmienne domyślnie nie są ostateczne. Może zawierać nieterminalne zmienne. 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 zawierać publiczne, prywatne, statyczne i chronione modyfikatory dostępu. Metody są jawnie publiczne i abstrakcyjne w interfejsie Java.
Nie obsługuje wielu dziedziczeń. Obsługuje wiele dziedziczenia.
Jest idealny do ponownego użycia kodu i perspektywy ewolucji. Jest idealny do deklaracji typu.

Podsumowanie klas abstrakcyjnych i interfejsu w Javie

Obie abstrakcyjne klasy i interfejsy są używane do abstrakcji; jednak mają one sprawiedliwy udział w różnicach. Główna różnica między nimi wynika z metod abstrakcji. Podczas gdy te pierwsze mogą, ale nie muszą mieć metod abstrakcyjnych, te ostatnie są implicite abstrakcyjne. Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nie abstrakcyjne. Z drugiej strony interfejs może mieć jedynie metody abstrakcyjne, dlatego nie mogą mieć implementacji, co oznacza, że ​​interfejs nie może mieć metod nie abstrakcyjnych. Klasa abstrakcyjna nie może być utworzona, co zabrania tworzenia obiektu. Z drugiej strony interfejs może wyglądać jak klasa, ale tak nie jest.