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

Kluczowa różnica: Interfejs lub protokół jest popularnym sposobem, który pozwala niezwiązanym obiektom komunikować się ze sobą. Reprezentuje uzgodnione zachowanie, które ułatwia interakcję między dwoma obiektami. Klasa abstrakcyjna to klasa obiektów, których nie można utworzyć w instancji lub skonfigurować instancji obiektu. Ta klasa może nie mieć implementacji lub może mieć niekompletną implementację.

Java, C ++, C # to skomplikowane języki programowania, które wymagają szczegółowej analizy i zrozumienia, aby móc z nimi pracować. Istnieje wiele różnych metod używanych w tych językach, które decydują o tym, jak język będzie działać. Interfejs i Klasa abstrakcyjna to dwa mylące pojęcia, które są częścią OOP (programowanie obiektowe). Te dwa mogą być stosowane pojedynczo lub razem ze sobą. Te dwa są całkowicie różne od siebie i są używane w różnych przypadkach.

Java jest językiem programowania, na który wpłynął język C. Składa się on z dużej części składni C i C ++, jednak ma mniej obiektów niskiego poziomu. Java jest uniwersalnym językiem programowania, który ma mniej zależności implementacyjnych w porównaniu do poprzednich języków. Jest to język współbieżny, oparty na klasach i obiektowy.

Java została opracowana przez Jamesa Goslinga w Sun Microsystems i została wydana w 1995 roku. Pierwotnie została wydana jako główny komponent platformy Java Sun Microsystems. Od tego czasu Sun przejął licencję na większość technologii Java na licencji GNU General Public Licence. Oznacza to, że cała technologia objęta licencją GNU General Public Licence jest open source i ogólnie dostępna bezpłatnie. Sun Microsystems ostatecznie połączył się z Oracle Corporation. Od 2012 roku Java stała się jednym z najpopularniejszych języków programowania. Dotyczy to szczególnie aplikacji internetowych typu klient-serwer. Wiele innych systemów opracowało alternatywne implementacje technologii Sun, takie jak GNU Compiler for Java i GNU Classpath.

Interfejs lub protokół jest popularnym sposobem, który pozwala niezwiązanym obiektom komunikować się ze sobą. Reprezentuje uzgodnione zachowanie, które ułatwia interakcję między dwoma obiektami. Interfejs zawiera klucz do różnych realizowanych działań i służy jako połączenie między dwoma różnymi obiektami. Jeśli klasa obiektów jest narażona na działanie interfejsu, klasa musi przestrzegać zachowania zaimplementowanego przez interfejs. Zwykle interfejsy zawierają tylko stałe deklaracje i sygnatury metod. Każdy interfejs implementujący określony interfejs musi stosować wszystkie metody wymienione w interfejsie lub być zadeklarowany jako klasa abstrakcyjna. W języku Java dowolny obiekt można zdefiniować jako interfejs, jeśli ten obiekt jest pusty lub zawiera klasę, w której implementuje dany interfejs. Można wdrożyć wiele interfejsów do jednej klasy w Javie za pomocą słów kluczowych narzędzi.

Klasa abstrakcyjna to klasa obiektów, których nie można utworzyć w instancji lub skonfigurować instancji obiektu. Ta klasa może nie mieć implementacji lub może mieć niekompletną implementację. Może również zawierać abstrakcyjne metody lub właściwości, które są wspólne dla wszystkich podklas. W niektórych językach programowania typy abstrakcyjne bez implementacji są znane jako interfejsy. W języku Java typ abstrakcyjny można utworzyć za pomocą słowa kluczowego "abstract" w definicji klasy. Celem posiadania klasy abstrakcyjnej jest umieszczenie wszystkich metod, które nie są zaimplementowane w klasie abstrakcyjnej i pozostawienie jej podklasie w celu określenia sposobu implementacji tych klas. Jeśli klasa ma jedną abstrakcyjną metodę, klasa musi być zadeklarowana jako klasa abstrakcyjna, chociaż nie trzeba mieć co najmniej jednej metody deklarowania abstrakcji klasy.

Malliktalksjava.in wymienia główne różnice między interfejsem i streszczeniem jako:

  • Klasa abstrakcyjna ma konstruktor, ale interfejs nie.
  • Klasy abstrakcyjne mogą mieć implementacje dla niektórych członków (metod), ale interfejs nie może mieć implementacji dla żadnego z jej członków.
  • Klasy abstrakcyjne powinny mieć podklasy, które będą bezużyteczne.
  • Interfejsy muszą mieć implementacje innych klas, które będą bezużyteczne
  • Tylko interfejs może rozszerzyć inny interfejs, ale każda klasa może rozszerzyć klasę abstrakcyjną.
  • Wszystkie zmienne w interfejsach są domyślnie końcowe
  • Interfejsy zapewniają formę wielokrotnego dziedziczenia. Klasa może obejmować tylko jedną inną klasę.
  • Interfejsy są ograniczone do publicznych metod i stałych bez implementacji. Klasy abstrakcyjne mogą mieć częściową implementację, części chronione, metody statyczne itp.
  • Klasa może implementować kilka interfejsów. Ale w przypadku klasy abstrakcyjnej klasa może rozciągać się tylko na jedną klasę abstrakcyjną.
  • Interfejsy są powolne, ponieważ wymagają dodatkowego pośrednictwa, aby znaleźć odpowiednią metodę w rzeczywistej klasie. Klasy abstrakcyjne są szybkie.
  • Modyfikator dostępności (publiczny / prywatny / wewnętrzny) jest dozwolony dla klasy abstrakcyjnej. Interfejs nie zezwala na modyfikator dostępu
  • Klasa abstrakcyjna może zawierać pełne lub niekompletne metody. Interfejsy mogą zawierać tylko podpis metody, ale bez treści. Zatem klasa abstrakcyjna może implementować metody, ale interfejs nie może implementować metod.
  • Klasa abstrakcyjna może zawierać pola, konstruktory lub destruktory i właściwości implementacji. Interfejs nie może zawierać pól, konstruktorów ani destruktorów i ma tylko podpis właściwości, ale brak implementacji.
  • Różne modyfikatory dostępu, takie jak abstrakcyjne, chronione, wewnętrzne, publiczne, wirtualne itp. Są użyteczne w klasach abstrakcyjnych, ale nie w interfejsach.
  • Zakres abstrakcji zależy od klasy pochodnej.
  • Zasięg interfejsu odpowiada dowolnemu poziomowi jego łańcucha dziedziczenia.

Informacje na temat tabeli pochodzą z witryny codeproject.com i mindprod.com

Berło

Klasa abstrakcyjna

Wielokrotne dziedziczenie

Klasa może dziedziczyć kilka interfejsów.

Klasa może dziedziczyć tylko jedną klasę abstrakcyjną.

Domyślna implementacja

Interfejs nie może dostarczyć żadnego kodu, tylko podpis.

Klasa abstrakcyjna może dostarczyć pełny, domyślny kod i / lub tylko szczegóły, które muszą zostać zastąpione.

Modyfikatory dostępu

Interfejs nie może mieć modyfikatorów dostępu dla podsystemów, funkcji, właściwości itd. Wszystko jest przyjmowane jako publiczne.

Klasa abstrakcyjna może zawierać modyfikatory dostępu dla podsystemów, funkcji, właściwości.

Core vs. Peripheral

Interfejsy są używane do definiowania peryferyjnych umiejętności klasy. Innymi słowy, zarówno człowiek jak i pojazd mogą dziedziczyć z interfejsu wymiennego.

Klasa abstrakcyjna definiuje rdzenną tożsamość klasy i tam jest używana dla obiektów tego samego typu.

Jednorodność

Jeśli różne implementacje dzielą tylko sygnatury metod, lepiej jest użyć interfejsów.

Jeśli różne implementacje są tego samego rodzaju i używają wspólnego zachowania lub statusu, wówczas lepiej zastosować klasę abstrakcyjną.

Prędkość

Wymaga więcej czasu na znalezienie właściwej metody w odpowiednich klasach.

Szybki

Dodawanie funkcjonalności

Jeśli dodamy nową metodę do interfejsu, musimy wyśledzić wszystkie implementacje interfejsu i zdefiniować implementację dla nowej metody.

Jeśli dodamy nową metodę do klasy abstrakcyjnej, mamy opcję domyślnej implementacji, dlatego cały istniejący kod może działać poprawnie.

Pola i stałe

W interfejsach nie można definiować żadnych pól.

Klasa abstrakcyjna może mieć zdefiniowane pola i stałe.

Jędrność

Stałe deklaracje w interfejsie są przypuszczalnie publicznym końcem statycznym.

Współdzielony kod można dodać do klasy abstrakcyjnej.

Stałe

Tylko statyczne stałe końcowe, mogą używać ich bez kwalifikacji w klasach implementujących interfejs.

Możliwe są zarówno stałe instancji, jak i statyczne. Zarówno statyczny jak i instancyjny kod inicjujący są również możliwe do obliczenia stałych.

Wygoda dla osób trzecich

Implementację interfejsu można dodać do dowolnej istniejącej klasy strony trzeciej.

Klasa strony trzeciej musi zostać przepisana, aby rozciągać się tylko od klasy abstrakcyjnej.

is-a vs.able lub can-do

Interfejsy są często używane do opisania peryferyjnych zdolności danej klasy, a nie jej centralnej tożsamości, np. Klasa Automobile może implementować interfejs Recyklingu, który może być zastosowany do wielu innych, całkowicie niezwiązanych ze sobą obiektów.

Klasa abstrakcyjna definiuje rdzeń tożsamości swoich potomków. Wdrożone interfejsy wymieniają ogólne rzeczy, które klasa może robić, a nie rzeczy, które są klasą.

W kontekście Java użytkownicy zazwyczaj powinni implementować interfejs Runnable zamiast rozszerzać wątek, ponieważ nie są naprawdę zainteresowani zapewnieniem nowej funkcji Thread, zwykle chcą, aby jakiś kod posiadał możliwość niezależnego działania. Chcą stworzyć coś, co można uruchomić w wątku, a nie nowy rodzaj wątku. Podobny jest a kontra ma - debata pojawia się, gdy zdecydujesz się dziedziczyć lub delegować.

Podłącz

Użytkownik może napisać nowy moduł zastępujący dla interfejsu, który nie zawiera wspólnego kija wspólnego z istniejącymi implementacjami. Kiedy użytkownik implementuje interfejs, zaczyna od zera bez żadnej domyślnej implementacji. Użytkownik musi uzyskać narzędzia z innych klas; nic nie ma interfejsu innego niż kilka stałych. Daje to użytkownikowi swobodę realizacji radykalnie odmiennego projektu wewnętrznego.

Użytkownik musi korzystać z abstrakcyjnej klasy, tak jak jest to dla kodu bazowego, ze wszystkimi powiązanymi z nią bagażami, dobrymi lub złymi. Autor klas abstrakcyjnych narzucił strukturę użytkownikowi.

Konserwacja

Jeśli kod klienta mówi tylko pod kątem interfejsu, możesz łatwo zmienić konkretną implementację za pomocą metody fabrycznej.

Jeśli kod klienta mówi tylko w kategoriach klasy abstrakcyjnej, możesz łatwo zmienić konkretną implementację za pomocą metody fabrycznej.

Zalecane

Podobne Artykuły

  • różnica pomiędzy: Różnica między iPad Mini i Asus FonePad

    Różnica między iPad Mini i Asus FonePad

    Kluczowa różnica: iPad Mini to elegancki, cieńszy iPad 2. iPad Mini jest wyposażony w 7, 9-calowy podświetlany diodami LED ekran dotykowy z ekranem dotykowym IPS pokryty odpornym na odciski palca oleofobowym materiałem. Asus ogłosił uruchomienie najnowszego phabletu Asus Fonepad. Fonepad to 7-calowy tablet z Androidem, który umożliwia użytkownikom wykonywanie połączeń telefonicznych poprzez umieszczenie urządzenia na uchu. Phablet ma 7-
  • różnica pomiędzy: Różnica między wrażeniem a percepcją

    Różnica między wrażeniem a percepcją

    Kluczowa różnica: odczucia to rzeczy w naszym środowisku zarejestrowane przez pięć głównych narządów zmysłów. Uczucie jest tym, co widzimy, słyszymy, wąchamy, smakujemy i czujemy. Percepcja polega na tym, jak interpretujemy te odczucia. Percepcja pomaga nam zrozumieć nasze odczucia. Słowa "sensacja" i "percepcja" są ze sobą powiązane, co sprawia, że ​​dość łatwo miesza się definicję dwóch słów. Sensacja jest zasadniczo &quo
  • różnica pomiędzy: Różnica między Samsung Galaxy Mega 5.8 i Samsung Galaxy S3

    Różnica między Samsung Galaxy Mega 5.8 i Samsung Galaxy S3

    Kluczowa różnica: Samsung rozszerzył swoją ofertę w kategorii phablet, wprowadzając Samsung Galaxy Mega 5.8 i Samsung Galaxy Mega 6.3. Samsung Galaxy Mega 5.8 został nazwany tak ze względu na pojemnościowy ekran dotykowy TFT 5, 8 cala o rozdzielczości 540 x 960 pikseli. Telefon jest zasilany dwurdzeniowym procesorem 1, 4 GHz z 1, 5 GB pamięci RAM. Galaxy S3
  • różnica pomiędzy: Różnica między Samsung Galaxy Tab 2 10.1 i iPad

    Różnica między Samsung Galaxy Tab 2 10.1 i iPad

    Kluczowa różnica: Galaxy Tab 2 10.1 to 10, 1-calowy tablet, który został wprowadzony na rynek w maju 2012 roku. Tabletki mają pojemnościowy ekran dotykowy TFT z funkcją Plane Line Switching (PLS) o gęstości około 149 ppi, dzięki czemu rozdzielczość na ekranie nie jest zbyt duża. Model Wi-Fi jest zasilany dwurdzeniowym Cortex-A9 1 GHz, natomiast model Wi-Fi + Mobile jest zasilany 1, 5 GHz, dwurdzeniowy procesor Kuala Qualcomm. iPady mają e
  • różnica pomiędzy: Różnica między gołębiem a mewa

    Różnica między gołębiem a mewa

    Kluczowa różnica: Gołębie należą do rodziny Columbidae w królestwie Animalia. Można je znaleźć w prawie wszystkich siedliskach i regionach, z wyjątkiem miejsc o ekstremalnym upale lub ekstremalnie niskich temperaturach. Gołębie różnią się wielkością w zależności od różnych gatunków, a niektóre mogą nawet rosnąć do wielkości indyka. Naukowo termin "mewy&q
  • różnica pomiędzy: Różnica między Nowym Jorkiem a Chicago

    Różnica między Nowym Jorkiem a Chicago

    Kluczowa różnica: Nowy Jork ma znaczący wpływ na handel, finanse, media, sztukę, modę, badania, technologię, edukację i rozrywkę. Chicago jest uważane za międzynarodowe centrum finansów, handlu, przemysłu, technologii, telekomunikacji i transportu. Który z nich jest lepszy, Nowy Jork czy Chicago? To pytanie z
  • różnica pomiędzy: Różnica między dębem a popiołem

    Różnica między dębem a popiołem

    Kluczowa różnica: dąb i jesion to dwa różne rodzaje drzew. Terminy te są również używane do wskazania drewna uzyskanego z ich odpowiednich drzew. Dęby uważane są za twarde, ciężkie, trwałe i drogie. Dąb jest również znany z wytrzymałości i trwałości, a także wysokiej odporności na wilgoć i wilgoć. Popiół jest jednym z naj
  • różnica pomiędzy: Różnica między krajobrazem a portretem

    Różnica między krajobrazem a portretem

    Kluczowa różnica: Po pierwsze, terminy odnoszą się do typów obrazów: krajobraz jest w rzeczywistości obrazem ziemi, podczas gdy portret jest obrazem osoby. Po drugie, terminy odnoszą się do orientacji, gdzie pejzaż odnosi się do czegoś, co jest szersze niż wyższe, podczas gdy portret jest czymś, co jest wyższe, a nie szersze. Pojęcia krajob
  • różnica pomiędzy: Różnica między Superkomputerem i Mainframe

    Różnica między Superkomputerem i Mainframe

    Kluczowa różnica: Superkomputer to potężny komputer, który jest używany do przetwarzania danych z możliwie największą prędkością. Komputer mainframe to duży komputer, który służy do obliczeń dotyczących ogromnej ilości danych. Zatem głównym celem superkomputera jest szybkość, podczas gdy na komputerze typu mainframe zajmuje się on dużą ilością danych. Komputery mainframe nie są

Wybór Redakcji

Różnica między brzuszkami a przysiadaniami

Kluczowa różnica: Brzuszki i przysiady są częstymi ćwiczeniami brzucha. Ćwiczenie jest ćwiczeniem treningu siłowego, które wzmacnia zginacze i mięśnie brzucha oprócz mięśni klatki piersiowej, szyi, dolnej części pleców i kończyn dolnych. Z drugiej strony, chrupnięcie jest uważane za półsiedzące. Ćwiczy tylko mięśnie