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

Anonim

Abstract Class vs Interface w Javie

Aby zrozumieć różnice między klasą abstrakcyjną a interfejsem w Javie, ważne jest, aby przede wszystkim zrozumieć każdy z nich niezależnie. Klasa abstrakcyjna w języku Java jest używana w deklaracji podklas ze zbiorem wspólnych cech. Powszechne użycie klasy abstrakcyjnej jest superklasą innych klas, co w efekcie pozwala jej rozszerzać klasę abstrakcyjną. Słowo kluczowe abstrakcyjne jest używane w deklaracji klasy abstrakcyjnej. Tak jak każda inna klasa, klasa abstrakcyjna ma pola opisujące metody i cechy, które klasa może wykonać. Z samej deklaracji klasy abstrakcyjnej klasa nie może być inicjowana

Interfejs Java można przyrównać do protokołu. Reprezentuje ustalone i uzgodnione zachowanie, które pozwala na ułatwienie interakcji niezwiązanych obiektów. W zależności od użytkownika interfejs zachowuje klucz do różnych wdrażanych działań. Interfejs służy zatem jako łącznik między producentem a konsumentem. Interfejsy w Javie są zatem grupą metod zawierających puste obiekty, które mogą mieć stałe deklaracje. Wystawiając klasę na interfejs Java, oznacza to, że oczekiwane zachowanie klasy jest implementacją wszystkich metod interfejsu.

Różnice

Po pierwsze, klasa abstrakcyjna pozwala na pola, które nie są statyczne lub końcowe, w przeciwieństwie do pól statycznych i końcowych używanych w interfejsach. Interfejsy nie mogą zawierać kodu implementacji, a kod implementacji może być użyty w klasie abstrakcyjnej. Kody implementacji wdrożone w klasie abstrakcyjnej mogą mieć kilka lub wszystkie z wdrożonych 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ć, np. Publiczne, chronione, prywatne lub żadne. Z drugiej strony widoczność interfejsu może być ustawiona tylko na jeden tryb widoczności, który jest "publiczny".

Klasa abstrakcyjna automatycznie dziedziczy klasę obiektu. W efekcie oznacza to, że uwzględnione są metody takie jak clone () i equals (). W interfejsie nie jest możliwe dziedziczenie klasy obiektu. Następnie klasa abstrakcyjna ma możliwość posiadania konstruktora, ale interfejs nie może go mieć.

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 istnieć tylko jedna super klasa, może być zaimplementowana w dowolnej liczbie interfejsów. Nie jest możliwe posiadanie wielu dziedziczeń w klasie abstrakcyjnej.

W wydajności, interfejsy wydają się być wolniejsze w implementacji niż w klasie abstrakcyjnej, głównie ze względu na dodatkowy kierunek znajdowania odpowiedniej metody w klasie. Różnica jednak stała się wolniejsza ze względu na nowoczesne maszyny wirtualne Java, które są nieustannie aktualizowane.

Dodanie metody w interfejsie wymaga wyśledzenia wszystkich klas implementujących implementujących dany interfejs. Alternatywnie możesz rozszerzyć interfejs, aby umożliwić mu dodatkowe metody. Jeśli masz do czynienia z klasą abstrakcyjną, wszystko, co jest wymagane, to dodanie domyślnej implementacji metody i kod nadal działa. O ile istnieją różnice między klasami abstrakcyjnymi a interfejsami, ważne jest, aby pamiętać, że nie są one rywalami, ale wspomniane tu różnice służą wzajemnemu uzupełnianiu się.

streszczenie

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

  2. W interfejsach nie można używać kodu implementacji, a można go używać w klasie abstrakcyjnej.

  3. Widoczność interfejsu może być jawna, a widoczność w klasie abstrakcyjnej może być różna.

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

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