Klasa abstrakcyjna i interfejs są używane głównie do abstrakcji, jednak bardzo się od siebie różnią. Oba są podstawową częścią Javy, ale mają swoje własne zastosowania aplikacyjne. Chociaż oba terminy mogą być synonimami, nie mogą być używane zamiennie.

Istnieją znaczące różnice pomiędzy nimi. Podczas gdy metoda interfejsu jest domyślnie abstrakcyjna, abstrakcja może zawierać zarówno metody abstrakcyjne jak i nieabstrakcyjne. Cóż, od czasu Javy 8, interfejsy mają również implementacje metod i mogą mieć zarówno statyczne, jak i domyślne metody w Javie. Zbadajmy szczegółowo różnicę między tymi dwoma.

Czym jest klasa abstrakcyjna w Javie?

Klasa abstrakcyjna w Javie to klasa, która została zadeklarowana jako abstrakcyjna – może, ale nie musi zawierać abstrakcyjnych metod. Jest ona podobna do interfejsu w Javie, z wyjątkiem tego, że może zawierać domyślne implementacje metod. Podobnie jak w programowaniu obiektowym, abstrakcja w Javie jest osiągana 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” jest używane do tworzenia klasy abstrakcyjnej tuż przed słowem kluczowym class w deklaracji klasy.

Klasa abstrakcyjna może, ale nie musi, zawierać metody abstrakcyjne (metody bez ciała), ale jeśli klasa ma przynajmniej jedną metodę abstrakcyjną, musi być zadeklarowana jako abstrakcyjna. Jednakże metody nieabstrakcyjne mogą być również używane w klasie abstrakcyjnej, ale tylko w celu implementacji domyślnego zachowania. Metody w klasie abstrakcyjnej mogą mieć modyfikatory dostępu takie jak private, public, static i protected, w zależności od poziomu widoczności. Klasa abstrakcyjna nie może być instancjonowana i nie zapewnia 100-procentowej abstrakcji ze względu na to, że może mieć konkretne metody.

Co to jest interfejs?

Interfejs, choć wygląda jak klasa, nie jest nią. Ponieważ Java nie wspiera wielokrotnego dziedziczenia, interfejs czasami jest idealny do zapewnienia podstawy dla hierarchii klas. Interfejs jest bardziej schematem klasy, który jest również używany do osiągnięcia abstrakcji w Javie. Zawiera on abstrakcyjne metody i statyczne stałe. W prostych słowach, interfejs jest kolekcją abstrakcyjnych metod, które są używane do określenia zachowania, które klasa musi zaimplementować. W przeciwieństwie do klasy abstrakcyjnej, interfejs zapewnia pełną abstrakcję w Javie. Może on posiadać zarówno metody jak i zmienne tak jak klasa, jednak metody zadeklarowane w interfejsie są domyślnie abstrakcyjne.

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

Podsumowanie punktów dotyczących klasy abstrakcyjnej i interfejsu w Javie

Zarówno klasa abstrakcyjna, jak i interfejs są używane do abstrakcji; jednak mają swój sprawiedliwy udział w różnicach. Główna różnica między nimi jest napędzana przez metody abstrakcji. Podczas gdy pierwsza może mieć lub nie mieć metod abstrakcyjnych, druga jest niejawnie abstrakcyjna. Klasa abstrakcyjna może mieć zarówno metody abstrakcyjne, jak i nieabstrakcyjne. Interfejs, z drugiej strony, może mieć tylko metody abstrakcyjne, więc nie mogą mieć implementacji, co po prostu oznacza, że interfejs nie może mieć metod nieabstrakcyjnych. Klasa abstrakcyjna nie może być instancjonowana, co zabrania tworzenia obiektu. Interfejs, z drugiej strony, może wyglądać jak klasa, ale nie jest.