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

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

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

Istnieją znaczące różnice między nimi. Chociaż metoda interfejsu jest domyślnie abstrakcyjna, streszczenie może zawierać zarówno metody abstrakcyjne, jak i nie-abstrakcyjne. Cóż, ponieważ Java 8 interfejsy mają również implementacje metod i mogą mieć zarówno metody statyczne, jak i domyślne w Javie. Szczegółowo przestudimy różnicę między nimi.

Jaka jest klasa abstrakcyjna w Javie?

Klasa abstrakcyjna w Javie to klasa deklarowana abstrakcyjnie - może, ale nie musi zawierać metod abstrakcyjnych. Jest dość podobny do interfejsu Java, z wyjątkiem faktu, że może zawierać domyślną implementację metody. Podobnie jak w programowaniu obiektowym, abstrakcja w Javie osiąga się za pomocą klas abstrakcyjnych i interfejsów. W Javie abstrakcja oznacza ukrywanie nieistotnych szczegółów przed użytkownikiem, aby skupić się tylko na podstawowych szczegółach, aby zwiększyć wydajność, zmniejszając w ten sposób złożoność. Słowo kluczowe „streszczenie” służy do tworzenia klasy abstrakcyjnej tuż przed słowem kluczowym klasy w deklaracji klasowej.

Klasa abstrakcyjna może, ale nie musi zawierać metod abstrakcji (metody bez ciała), ale jeśli klasa ma co najmniej jedną metodę abstrakcji, należy ją zadeklarować abstrakt. Jednak metody nie-abstrakcyjne mogą być również stosowane tylko w klasie abstrakcyjnej, ale tylko w celu wdrożenia 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. Klasy abstrakcyjnej nie mogą być utworzone i nie zapewnia 100 -procentowej abstrakcji z powodu faktu, że może mieć konkretną metodę.

Co to jest interfejs?

Interfejs wygląda jednak jak klasa, nie jest. Ponieważ Java nie obsługuje wielu dziedziczeń, interfejs czasami jest idealny do zapewnienia bazy dla hierarchii klasowej. Interfejs jest bardziej planem klasy, który jest również używany do osiągnięcia abstrakcji w Javie. Zawiera abstrakcyjne metody i stałe statyczne. Mówiąc prosto, interfejs to zbiór metod abstrakcyjnych, które są używane do określenia 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 przede wszystkim do abstrakcji, różnią się od siebie. Chociaż klasa abstrakcyjna to klasa, interfejs to interfejs. Oznacza to, że chociaż interfejs może rozszerzyć tylko inny interfejs Java, klasa abstrakcyjna może zaimplementować wiele dziedziczeń w Javie. Cóż, Java nie obsługuje wielu dziedziczeń, ale można wdrożyć wiele dziedziczeń w Javie.
  2. „Typ 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ć metody abstrakcyjne, jak i nie-abstractowe. Jednak od Java 8 interfejs może mieć również metody domyślne i statyczne.
  3. „Modyfikatory dostępu” klasy 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żesz użyć ż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ż „abstrakcyjne” słowo kluczowe służy do deklarowania metody klasy abstrakcyjnej jako abstrakcyjnej, interfejsy są całkowicie inną historią; Mogą mieć tylko publiczne, statyczne stałe końcowe i deklaracje metod.
  6. „Używanie” klasy abstrakcyjnej i interfejsu w Javie - Podczas gdy interfejs jest idealny do deklaracji typu, klasa abstrakcyjna najlepiej nadaje się do ponownego użycia kodu i perspektywy ewolucji. Interfejs wygląda jak klasa, ale nie jest to klasa.
  7. „Niezawodność” klasy abstrakcyjnej i interfejsu w Javie- Kolejną główną 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, zanim jakakolwiek zastąpiona metoda zostanie wywołana w Javie.
  8. „Końcowe zmienne” klasy abstrakcyjnej i interfejsu w Javie - Zmienne zadeklarowane w interfejsie są domyślnie ostateczne, podczas gdy klasa abstrakcyjna może, ale nie musi zawierać zmiennych niefinałowych.

Streszczenie klasy vs interfejs w Javie: Tabela porównawcza

Klasa abstrakcyjna Interfejs
Streszczenie Słowo kluczowe służy do tworzenia klasy abstrakcyjnej i można je stosować z metodami. Słowo kluczowe interfejsu służy do tworzenia interfejsu, ale nie można go używać z metodami.
Klasa może przedłużyć tylko jedną klasę abstrakcyjną. Klasa może zaimplementować 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 nie są domyślnie ostateczne. Może zawierać zmienne niefalowe. Zmienne są domyślnie ostateczne 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ą domyślnie publiczne i abstrakcyjne w interfejsie Java.
Nie obsługuje wielu dziedziczeń. Obsługuje wiele dziedziczeń.
Jest idealny do ponownego użycia kodu i perspektywy ewolucji. Jest idealny do deklaracji typu.

Punkty podsumowujące na klasie abstrakcyjnej i interfejsie w Javie

Zarówno klasa abstrakcyjna, jak i interfejs są używane do abstrakcji; Mają jednak swój uczciwy udział w różnicach. Główna różnica między nimi jest napędzana metodami abstrakcji. Chociaż te pierwsze mogą mieć metody abstrakcyjne, druga jest domyślnie abstrakcyjna. 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 po prostu interfejs nie może mieć metod nie-abstrakcyjnych. Nie można utworzyć klasy abstrakcyjnej, która zabrania tworzenia obiektu. Z drugiej strony interfejs może wyglądać jak klasa, ale tak nie jest.