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

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

Interfejs klasy abstrakcyjnej vs w Javie

Aby zrozumieć różnice między klasą abstrakcyjną a interfejsem w Javie, należy przede wszystkim zrozumieć każdy z nich niezależnie. Klasa abstrakcyjna w Javie jest wykorzystywana do deklaracji podklas o zestawie wspólnych cech. Powszechne stosowanie klasy abstrakcyjnej to super klasa innych klas, które w efekcie pozwala jej rozszerzyć klasę abstrakcyjną. W deklaracji klasy abstrakcyjnej używane jest abstrakcyjne słowo kluczowe. Podobnie jak każda inna klasa, klasa abstrakcyjna ma pola opisujące metody i cechy, które klasa może wykonać. Według samej deklaracji klasy abstrakcyjnej klasy nie można zainicjować

Interfejs Java może być zrównany z protokołem. Reprezentuje ustawione i uzgodnione zachowanie, które pozwala na ułatwienie interakcji niepowiązanych obiektów. W zależności od użytkownika interfejs zawiera klucz do wdrażanych działań. Interfejs służy zatem jako związek między producentem a konsumentem. Interfejsy w Javie są zatem grupą metod zawierających puste ciała, które mogą mieć stałe deklaracje. Wystawiając klasę na interfejs Java, oznacza to, że zachowanie oczekiwane od klasy jest implementacją wszystkich metod interfejsu.


Różnice

Po pierwsze, klasa abstrakcyjna pozwala na pola, które nie są statyczne ani ostateczne, w przeciwieństwie do pól statycznych i końcowych używanych w interfejsach. Interfejsy nie mogą mieć w nich żadnego kodu implementacyjnego, a w klasie abstrakcyjnej może istnieć kod implementacyjny. Kody implementacyjne wdrożone w klasie abstrakcyjnej mogą mieć kilka lub wszystkich zaimplementowanych metod. Domyślnie wszystkie metody interfejsu są „abstrakcyjne."

Widoczność jest również możliwa dla metod lub członków klasy abstrakcyjnej, które mogą się różnić, takie jak publiczne, chronione, prywatne lub brak. Z drugiej strony widoczność interfejsu może być ustawiona tylko w jednym trybie widoczności, który jest „publiczny.'"

Klasa abstrakcyjna automatycznie odziedziczy klasę obiektową. W efekcie oznacza to, że metody takie jak klon () i równe () są uwzględnione. W interfejsie nie jest możliwe dziedziczenie klasy obiektowej. Następnie klasa abstrakcyjna ma możliwość posiadania konstruktora, ale interfejs nie może mieć takiego.

Interfejs w Javie ma również bardzo ważną funkcję z implementacją wielu dziedziczeń, ponieważ klasa może mieć tylko jedną super klasę. Chociaż może być obecna tylko jedna super klasa, można ją zaimplementować w dowolnej liczbie interfejsów. Nie można mieć wielu dziedziczeń w klasie abstrakcyjnej.

W wydajności interfejsy są zwykle wolniejsze we wdrażaniu, w przeciwieństwie do klasy abstrakcyjnej, głównie ze względu na dodatkowy kierunek znalezienia odpowiedniej metody w klasie. Różnica stała się jednak wolniejsza z powodu współczesnych wirtualnych maszyn Java, które są stale aktualizowane.

Dodanie metody w interfejsie wymaga wyśledzenia wszystkich klas implementacyjnych, które implementują określony interfejs. Alternatywnie możesz przedłużyć interfejs, aby umożliwić mu dodatkowe metody. Jeśli masz do czynienia z klasą abstrakcyjną, wszystko, co jest wymagane, to dodać domyślną implementację metody, a kod kontynuuje funkcjonowanie. Ponieważ istnieją różnice między klasami abstrakcyjnymi i interfejsami, ważne jest, aby zauważyć, że nie są to rywale, ale wspomniane tu różnice służą do uzupełnienia.  

Streszczenie

  1. Streszczenie pola klasy nie są statyczne ani ostateczne, w przeciwieństwie do interfejsu, który ma tabele statyczne i końcowe.

  2. Nie można używać kodu implementacji w interfejsach, podczas gdy może być używany w klasie abstrakcyjnej.

  3. Widoczność interfejsu może być publiczna, podczas gdy widoczność klasy abstrakcyjnej może się różnić.

  4. Klasa abstrakcyjna automatycznie odziedziczy klasę obiektu, ale w interfejsie nie jest możliwe.

  5. Klasa abstrakcyjna jest szybsza niż interfejs w implementacji.