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.
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ę.
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.
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. |
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.