Klasa abstrakcyjna a interfejs: różnice i podobieństwa
Opublikowany: 2021-06-02Jeśli czekasz na rozmowę kwalifikacyjną z inżynierem oprogramowania, jedynym pytaniem, którego możesz się spodziewać, jest - różnice i podobieństwa między klasą abstrakcyjną a interfejsem.
Klasy abstrakcyjne i interfejsy są podstawowymi blokami programowania zorientowanego obiektowo. Oba te rozwiązania umożliwiają programistom wdrożenie jednej z ważniejszych koncepcji obiektów OOP – abstrakcji. Chociaż klasy abstrakcyjne i interfejsy są używane do implementacji koncepcji abstrakcji, obie różnią się implementacją i mają różne przypadki użycia. Klasy abstrakcyjne i interfejsy mogą wydawać się podobne do początkującego, ale nie można ich używać zamiennie.
W tym artykule przyjrzymy się niuansom klas abstrakcyjnych, interfejsów oraz podobieństwom i różnicom między nimi. Należy pamiętać, że Klasa abstrakcyjna i interfejs to tylko koncepcja i mogą być zaimplementowane w dowolnym wybranym przez Ciebie języku programowania zorientowanego obiektowo. Aby zapewnić spójność, dowolna składnia, której używamy w tym artykule w celu wyjaśnienia koncepcji, będzie dotyczyć języka Java.
Pod koniec tego artykułu możesz wyraźnie rozróżnić klasy abstrakcyjne i interfejsy, które należy zaimplementować w konkretnych przypadkach.
Spis treści
Interfejsy – czym one są?
Interfejs w obiektach obiektowych można rozumieć po prostu jako kontrakt behawioralny między różnymi systemami. Oznacza to, że każda klasa, która implementuje interfejs, musi zapewnić pewną implementację dla wszystkich metod interfejsu.
Wszystkie metody w interfejsie muszą być publiczne i abstrakcyjne. Dlatego interfejsy są również rozumiane jako klasy „czysto abstrakcyjne”.
Definicja interfejsów wygląda tak:
interfejs publiczny Jedzenie{
publiczne żucie pustki();
publiczne trawienie pustki();
}
Jak widać, definicja obejmuje poprzedzenie nazwy słowem kluczowym interface . Ponadto w ramach tego interfejsu zdefiniowano dwie abstrakcyjne metody publiczne — więc klasa, która implementuje powyższy interfejs, będzie musiała zapewnić implementację funkcji chewing() i digesting(); Funkcje.
Teraz spójrzmy, czym są klasy abstrakcyjne, a następnie połączymy obie koncepcje, aby uzyskać lepszą przejrzystość ich podobieństw i różnic.
Klasy abstrakcyjne – czym są?
Słowo kluczowe abstract zawsze poprzedza klasę abstrakcyjną w swojej deklaracji. Co więcej, Klasy abstrakcyjne działają jako wytyczne stworzone dla ich pochodnych klas nieabstrakcyjnych. W tym sensie muszą mieć w swojej deklaracji co najmniej jedną metodę abstrakcyjną, jednocześnie zapewniając odpowiednią implementację dla jej metod nieabstrakcyjnych.
Tak wygląda definicja klas abstrakcyjnych:
publiczna klasa abstrakcyjna Jedzenie{
public void getReady(){
System.out.println(„Jestem gotowy do jedzenia”);
}
publiczny streszczenie void start();
public abstract void stop();
}
Jak widać w definicji klasy abstrakcyjnej, funkcja getReady() jest funkcją nieabstrakcyjną, natomiast start(); i stop(); funkcje są abstrakcyjne.
Jeśli chodzi o implementację klas abstrakcyjnych, należy pamiętać o kilku zasadach:
- Nie można utworzyć instancji klas abstrakcyjnych. Oznacza to, że nie możemy tworzyć obiektów z żadnych klas abstrakcyjnych.
- Każda klasa potomna, która rozszerzy klasę abstrakcyjną, musi zaimplementować wszystkie metody abstrakcyjne opisane w klasie abstrakcyjnej. Jeśli klasa potomna nie implementuje wszystkich metod abstrakcyjnych, klasa potomna również powinna być zadeklarowana jako klasa abstrakcyjna.
Teraz, gdy znamy już podstawy interfejsów i klas abstrakcyjnych, porozmawiajmy o tym, czym się różnią, jakie są podobieństwa i kiedy powinniśmy użyć którego podejścia.
Różnice i podobieństwa między interfejsami a klasami abstrakcyjnymi
Wszystkie metody zadeklarowane w interfejsie są niejawnie publiczne i abstrakcyjne — podczas gdy klasy abstrakcyjne mogą mieć różne rodzaje modyfikatorów dla swoich metod — od częściowych, publicznych, statycznych, chronionych i innych.
Ponadto każda klasa zdefiniowana przez użytkownika może zaimplementować więcej niż jeden interfejs. Mogą jednak zaimplementować tylko jedną klasę abstrakcyjną. Zarówno interfejsy, jak i klasy abstrakcyjne mogą mieć metody i zmienne, ale żadnego z nich nie można utworzyć. Wszystkie zmienne zadeklarowane w interfejsie są ostateczne. Jednak zmienne zadeklarowane w klasach abstrakcyjnych mogą być nieostateczne i mogą być modyfikowane przez klasy zdefiniowane przez użytkownika.
Oto podsumowanie wszystkich kluczowych różnic między klasą abstrakcyjną a interfejsem.
Parametr | Klasy abstrakcyjne | Interfejsy |
Słowo kluczowe | używane jest abstrakcyjne słowo kluczowe. | używane jest słowo kluczowe interface . |
Rodzaj zmiennych | Może obsługiwać zmienne końcowe, nieostateczne, statyczne i niestatyczne. | Może mieć domyślnie zdefiniowane tylko zmienne statyczne i końcowe. |
Zmienne końcowe | Może, ale nie musi, mieć w nim zadeklarowane zmienne końcowe. | Zmienne domyślnie są deklarowane jako ostateczne |
Modyfikatory dostępu | Może mieć wszystkie modyfikatory – prywatny, publiczny, statyczny itp. | Może mieć tylko modyfikator dostępu publicznego. |
Rodzaje metod | Może mieć zarówno metodę abstrakcyjną, jak i nieabstrakcyjną. | Może mieć tylko abstrakcyjne metody. |
Prędkość | Szybko | Powoli, ponieważ wymaga dodatkowego ukierunkowania. |
Klasa abstrakcyjna a interfejs: kiedy wybrać który?
Jeśli potrzebujesz klasy bazowej do dostarczania niektórych implementacji w swoim kodzie – klasa abstrakcyjna jest drogą do zrobienia. Na przykład możesz chcieć zainicjować kilka zmiennych w klasie, aby wykonać pewną akcję logiczną w metodzie, z której mogą korzystać wszystkie klasy pochodne. W takim scenariuszu najlepszym rozwiązaniem jest użycie klasy abstrakcyjnej.
Jeśli jednak musisz zapewnić dodatkowe zachowanie do swoich klas, powinieneś wybrać interfejsy. W rzeczywistości zarówno interfejsy, jak i klasy abstrakcyjne oferują tę samą funkcjonalność. Jednak różnica pojawia się, gdy bierzesz pod uwagę standardy kodowania. Interfejsy pomagają osiągnąć abstrakcję i polimorfizm – dwie ważne zasady OOP. Pozwala również na trzymanie kodu luźno połączonego zamiast ściśle powiązanego.
Podsumujmy teraz przypadki użycia interfejsów i klas abstrakcyjnych!
Kiedy używać interfejsów?
Interfejs umożliwia programistom budowanie dodatkowych wzorców zachowań dla ich klas. Pozwala komuś zacząć od zera i zaimplementować interfejs w dowolnej klasie. Przeznaczenie interfejsu jest zatem przypadkowe – coś, co należy dodać do kodu. Tak więc w przypadkach, w których chcesz zapewnić dodatkowe funkcje klasom i nie masz nic przeciwko ujawnianiu metod interfejsu (ponieważ wszystkie metody będą publiczne), powinieneś rozpocząć implementację interfejsu.
Kiedy używać klas abstrakcyjnych?
W przeciwieństwie do interfejsów, klasy abstrakcyjne zapewniają znacznie większą strukturę. Klasy abstrakcyjne zawierają domyślne implementacje niektórych metod, a nawet oferują przydatne narzędzia do pełnej implementacji klasy abstrakcyjnej. Powinieneś używać klas abstrakcyjnych, aby zapewnić pewne wspólne funkcje w zestawie powiązanych klas, pozostawiając jednocześnie wystarczająco dużo miejsca na domyślne implementacje metod.
Ucz się kursów rozwoju oprogramowania online z najlepszych uniwersytetów na świecie. Zdobywaj programy Executive PG, Advanced Certificate Programs lub Masters Programs, aby przyspieszyć swoją karierę.
Na zakończenie
Abstrakcja jest kluczowym elementem obiektów OOP, a zarówno klasy abstrakcyjne, jak i interfejsy pozwalają osiągnąć pewien stopień abstrakcji w kodzie. Jednak używanie ich zamiennie bez znajomości zalet i wad jest błędem i może spowodować, że kod (i ostatecznie oprogramowanie) będzie zawierał błędy i opóźnienia.
Mamy nadzieję, że ten artykuł pomógł ci zrozumieć kluczowe różnice między klasami abstrakcyjnymi i interfejsami, a także pewną wiedzę składniową i miejsce ich implementacji.
Jeśli chcesz dowiedzieć się więcej o abstrakcyjnych klasach i interfejsach , zapoznaj się z programem Executive PG UpGrad i IIIT-B w zakresie pełnego tworzenia oprogramowania, który jest przeznaczony dla pracujących profesjonalistów i oferuje ponad 500 godzin rygorystycznych szkoleń, ponad 9 projektów i zadań , status absolwentów IIIT-B, praktyczne, praktyczne projekty zwieńczenia i pomoc w pracy z najlepszymi firmami.
Jeśli nadal nie masz pewności co do niuansów, napisz do nas komentarz poniżej, a wkrótce skontaktujemy się z Tobą!
Czym jest klasa abstrakcyjna w Javie?
Klasa abstrakcyjna to klasa, której nie można utworzyć i nie można jej dziedziczyć. Sama w sobie nie ma znaczących operacji i działa jedynie jako superklasa dla klas konkretnych. Służy wyłącznie do zapewnienia specjalizacji. Rozważmy przykład klasy Car i jej podklas samochód sportowy i hatchback. Klasa abstrakcyjna Car może być uważana za klasę nadrzędną dla wszystkich podklas.
Kiedy używać klasy abstrakcyjnej w Javie?
Głównym celem klasy abstrakcyjnej jest dostarczenie klasy bazowej dla grupy podobnych klas. Wszystkie klasy, które rozszerzają klasę abstrakcyjną, muszą implementować metody zdefiniowane w ich klasie abstrakcyjnej. Klasy abstrakcyjne służą głównie do definiowania konkretnego interfejsu, który klasa ma zaimplementować. Klasa abstrakcyjna może być użyta jako superklasa, w której możemy zdefiniować metody, a wymagane metody mogą być zaimplementowane w klasie potomnej i mogą być dziedziczone przez klasę potomną. Za pomocą klasy abstrakcyjnej możemy zdefiniować wspólny kod, który może być używany przez klasę potomną, co czyni ją bardziej wydajną.
Jakie są różnice między klasą abstrakcyjną a interfejsem w Javie?
Klasa abstrakcyjna i interfejs to dwa sposoby definiowania klasy, które zawierają niektóre, ale nie wszystkie metody do zaimplementowania przez klasę. Te dwa są statystycznie różne i osiągane inaczej. Ale pod względem dynamicznego użytkowania są takie same. Interfejs to po prostu klasa, która zawiera tylko stałe i abstrakcyjne deklaracje metod. Nie ma faktycznej implementacji interfejsu w Javie. Tak więc interfejsy są całkowicie atrapami klas. Interfejsy służą do definiowania kontraktów metod i stałych w klasie. Zmusi klasę do zaimplementowania tych samych metod i stałych. Metoda może być zaimplementowana w klasie abstrakcyjnej lub w podklasach. Klasa abstrakcyjna to klasa zawierająca metody abstrakcyjne. Podklasy implementują te abstrakcyjne metody. Klasa abstrakcyjna i interfejs mogą być używane razem, aby wymusić określone kontrakty w klasie.