Разлика между интерфейса и абстрактния клас в Java

Ключова разлика: Интерфейс или протокол е обичаен начин, който позволява на несвързани обекти да общуват помежду си. Той представлява съгласувано поведение, което улеснява взаимодействието между двата обекта. Абстрактен клас е клас от обекти, които не могат да бъдат инстанцирани или настроени за екземпляр на обект. Този клас може да няма изпълнение или може да има непълна реализация.

Java, C ++, C # са сложни езици за програмиране, които изискват подробно проучване и разбиране, за да могат да работят. Има много различни методи, които се използват в тези езици, които решават как ще работи езикът. Интерфейсът и абстрактният клас са две объркващи концепции, които са част от ООП (обектно-ориентирано програмиране). Тези две могат да се използват поотделно или заедно. Тези два са напълно различни един от друг и се използват в различни случаи.

Java е език за програмиране, който е бил повлиян от езика С. Той извлича голяма част от синтаксиса си от C и C ++, но има по-малко съоръжения от ниско ниво. Java е език за програмиране с общо предназначение, който е проектиран така, че да има по-малко зависимости в сравнение с предишните езици. Той е паралелен, базиран на класове и обектно-ориентиран език.

Java е разработена от Джеймс Гослинг от Sun Microsystems и е пусната през 1995 г. Първоначално тя беше издадена като основен компонент на Java платформата на Sun Microsystems. Оттогава Sun презарежда повечето от своите Java технологии под GNU General Public License. Това означава, че всички технологии, лицензирани под GNU General Public License, са с отворен код и обикновено са безплатни. Sun Microsystems в крайна сметка се сля с Oracle Corporation. От 2012 г. Java се превърна в един от най-популярните езици за програмиране. Това е особено вярно за клиент-сървър уеб приложения. Много други системи са разработили алтернативни приложения на Sun технологии, като GNU Compiler for Java и GNU Classpath.

Интерфейсът или протоколът е общ начин, който позволява на несвързани обекти да комуникират помежду си. Той представлява съгласувано поведение, което улеснява взаимодействието между двата обекта. Интерфейсът държи ключа към различните действия, които се изпълняват и служи като връзка между двата различни обекта. Ако даден клас обекти е изложен на интерфейса, класът ще трябва да следва поведението, изпълнено от интерфейса. Обикновено интерфейсите съдържат само постоянни декларации и сигнатури за методи. Всеки интерфейс, който изпълнява определен интерфейс, трябва да приложи всички методи, споменати в интерфейса или да бъде деклариран като абстрактен клас. В Java всеки обект може да бъде дефиниран като интерфейс, ако този обект е null или притежава клас, в който изпълнява този конкретен интерфейс. Човек може да внедри множество интерфейси в един клас в Java, използвайки ключови думи за изпълнение.

Абстрактен клас е клас от обекти, които не могат да бъдат инстанцирани или настроени за екземпляр на обект. Този клас може да няма изпълнение или може да има непълна реализация. Тя може също така да има абстрактни методи или свойства, които се споделят от всички подкласове. В някои програмни езици абстрактните типове без реализация са известни като интерфейси. В Java може да се създаде абстрактен тип, използвайки ключовата дума 'abstract' в дефиницията на класа. Целта на абстрактния клас е да постави всички методи, които не са реализирани в абстрактния клас, и да остави на подкласа да определи как да ги реализира. Ако един клас има един абстрактен метод, класът трябва да бъде обявен като абстрактна класа, въпреки че не е необходимо да има поне един единствен метод за обявяване на абстракцията на класа.

Malliktalksjava.in изброява основните разлики между интерфейса и абстракцията като:

  • Абстрактният клас има конструктор, но интерфейсът не го прави.
  • Абстрактните класове могат да имат изпълнения за някои от своите членове (Methods), но интерфейсът не може да има реализация за нито един от неговите членове.
  • Абстрактните часове трябва да имат подкласове, които да са безполезни.
  • Интерфейсите трябва да имат реализации от други класове, които ще бъдат безполезни
  • Само един интерфейс може да разшири друг интерфейс, но всеки клас може да разшири абстрактен клас.
  • Всички променливи в интерфейсите са окончателни по подразбиране
  • Интерфейсите осигуряват форма на множествено наследяване. Един клас може да разшири само един клас.
  • Интерфейсите са ограничени до публични методи и константи без реализация. Абстрактните класове могат да имат частично изпълнение, защитени части, статични методи и др.
  • Класът може да реализира няколко интерфейса. Но в случай на абстрактен клас, един клас може да разшири само един абстрактен клас.
  • Интерфейсите са бавни, тъй като се изисква допълнителна насоченост, за да се намери съответния метод в самия клас. Абстрактните часове са бързи.
  • Модификаторът за достъпност (публичен / частен / вътрешен) е позволен за абстрактния клас. Интерфейсът не позволява модификатор за достъпност
  • Абстрактен клас може да съдържа пълни или непълни методи. Интерфейсите могат да съдържат само подпис на метод, но не и тяло. Така една абстрактна класа може да приложи методи, но интерфейсът не може да приложи методи.
  • Абстрактен клас може да съдържа полета, конструктори или деструктори и свойства на приложения. Интерфейсът не може да съдържа полета, конструктори или деструктори и има само подпис на собствеността, но няма реализация.
  • Различни модификатори на достъпа като абстрактен, защитен, вътрешен, публичен, виртуален и т.н. са полезни в абстрактни класове, но не и в интерфейси.
  • Абстрактният обхват е до извлечения клас.
  • Обхватът на интерфейса е до всяко ниво от неговата верига на наследяване.

Информацията за таблицата е предоставена с codeproject.com и mindprod.com

интерфейс

Анотация клас

Многократно наследяване

Един клас може да наследи няколко интерфейса.

Един клас може да наследи само един абстрактен клас.

Реализация по подразбиране

Един интерфейс не може да осигури никакъв код, а само подпис.

Абстрактен клас може да предостави пълен код по подразбиране и / или само детайли, които трябва да бъдат отменени.

Модификатори за достъп

Интерфейсът не може да има модификатори на достъпа за подсистемите, функциите, свойствата и т.н.

Абстрактен клас може да съдържа модификатори за достъп за subs, функциите, свойствата.

Core срещу Peripheral

Интерфейсите се използват за определяне на периферните способности на даден клас. С други думи, както човешко, така и превозно средство може да наследи от интерфейса, който може да се използва.

Абстрактен клас определя основната идентичност на класа и се използва за обекти от същия тип.

хомогенност

Ако различни реализации споделят само сигнатури за метод, е по-добре да използвате интерфейси.

Ако различните изпълнения са от един и същ вид и използват общо поведение или статус, тогава абстрактният клас е по-добре да се използва.

скорост

Изисква повече време за намиране на действителния метод в съответните класове.

Бърз

Добавяне на функционалност

Ако добавим нов метод към интерфейс, тогава трябва да проследим всички реализации на интерфейса и да определим изпълнението за новия метод.

Ако добавим нов метод към абстрактен клас, тогава имаме възможността да предоставим по подразбиране изпълнението и затова целият съществуващ код може да работи правилно.

Полета и константи

В интерфейсите не могат да бъдат дефинирани полета.

Една абстрактна класа може да има дефинирани полета и константи.

изразителност

Постоянните декларации в интерфейса са всички предполагаеми публични статични финали.

Споделеният код може да бъде добавен в абстрактен клас.

константи

Само статични крайни константи могат да ги използват без квалификация в класове, които реализират интерфейса.

Възможни са както инстанции, така и статични константи. Могат да се изчисляват и константи както от статичния, така и от инстанционния код.

Удобство на трети лица

Реализация на интерфейс може да бъде добавена към всеки съществуващ клас на трети страни.

Клас на трета страна трябва да бъде пренаписан, за да обхване само абстрактния клас.

е-a срещу -able или can-do

Интерфейсите често се използват за описване на периферните способности на даден клас, а не на неговата централна идентичност, напр. Класът Automobile може да приложи интерфейса за рециклиране, който може да се прилага за много иначе напълно несвързани обекти.

Абстрактен клас определя основната идентичност на нейните потомци. Реализираните интерфейси изброяват общите неща, които един клас може да направи, а не нещата, които класът е.

В контекста на Java, потребителите обикновено трябва да реализират интерфейса Runnable, вместо да разширяват Thread, защото те не се интересуват от предоставяне на някаква нова функционалност на Thread, те обикновено просто искат някой код да има възможност да работи независимо. Те искат да създадат нещо, което може да се изпълни в нишка, а не в нов вид нишка. Подобен е-а срещу има-дебат идва, когато решите да наследите или делегирате.

Приставка

Потребителят може да напише нов заместващ модул за интерфейс, който съдържа не един стик код в общия случай със съществуващите реализации. Когато потребителят реализира интерфейса, те започват от нулата без никаква подмяна по подразбиране. Потребителят трябва да получи инструменти от други класове; нищо не идва с интерфейса, различен от няколко константи. Това дава на потребителя свобода да прилага радикално различен вътрешен дизайн.

Потребителят трябва да използва абстрактния клас като-е за кодовата база, с целия придружаващ багаж, добър или лош. Авторът на абстрактния клас е наложил структура на потребителя.

Поддръжка

Ако клиентският код говори само по отношение на интерфейс, можете лесно да промените конкретната реализация зад него, използвайки фабричен метод.

Ако клиентският код говори само по отношение на абстрактен клас, лесно можете да промените конкретното изпълнение зад него, използвайки фабричен метод.

Препоръчано

Свързани Статии

  • популярни сравнения: Разлика между VTSMX и VTSAX

    Разлика между VTSMX и VTSAX

    Ключова разлика: VTSMX и VTSAX са термини, свързани с фондовете. Те са едни и същи фондове с различни класове и различни съотношения на разходите. Фондът VTSMX се стреми да следи изпълнението на бенчмарк индекса, който измерва възвръщаемостта на инвестициите на общия фондов пазар. VTSMX означава Vanguard Total Stock Index Index. Тя може да бъде едно гише за инвеститорите, които търсят вътрешен фонд за акции, който инвестира широко в секторите и капитализациите. Morningstar нарича фонда основен
  • популярни сравнения: Разлика между Redneck и Hillbilly

    Разлика между Redneck и Hillbilly

    Ключова разлика: Redneck е пренебрежително или обидно понятие за член на бялата селска класа, особено в южните щати. Хилбили също е жаргонна дума за човек, който не притежава никаква класичност, който живее в изолиран планински район. Червеногушите и хълмовете често са събрани в една и съща широка галерия, но те имат различна природа и начин на живот. Те са две напълно различни групи. И двата термина се използват, з
  • популярни сравнения: Разлика между сладко и сладко

    Разлика между сладко и сладко

    Ключова разлика: прилагателните, сладки и сладки, отразяват приятното усещане за нещо. Обикновено те са синоними един на друг, но сладък се използва, когато човек се чувства привлекателен, а сладкото се използва, за да отразява приятното чувство и възхищение. Сладкото е просто чистата красота със сладост и доброта. Всъщност, не е задължително един сладък човек да има изключително привлекателни черти с прекрасна красота, но чистотата, сладостта и простотата са критери
  • популярни сравнения: Разлика между депресията и тъгата

    Разлика между депресията и тъгата

    Ключова разлика: Депресията е състояние на чувство за безнадеждност, отпадналост, ниско настроение и т.н. От друга страна, тъгата е сезонно емоционално разстройство, изразяващо нещастие. Винаги има объркване между двете емоции: депресия и тъга. Много е важно да се знае дали човекът е тъжен или депресиран. Тъгата не е постоянна, докато деп
  • популярни сравнения: Разлика между машиностроенето и автомобилостроенето

    Разлика между машиностроенето и автомобилостроенето

    Ключова разлика: Машиностроенето е отрасъл инженеринг, който включва проектиране, изграждане и експлоатация на машини. От друга страна, Automotive Engineering специално се занимава с изграждането и проектирането на автомобили. Автомобилно инженерство е подразделение на автомобилостроенето. Автомобилната техника също се счита за подразделение на машиностроенето, което се е разделило от основния
  • популярни сравнения: Разлика между слънчогледово масло и палмово масло

    Разлика между слънчогледово масло и палмово масло

    Ключова разлика: Слънчогледовото и палмовото масло са ядливи растителни масла, получени от съответните им източници, т.е. Слънчогледово масло, получено от натрошени слънчогледови семена; Палмовото масло се получава от маслодайно палмово растение. Храната, която е основна съставка в живота, е непълна без масла. Маслото от слънчоглед и палмово масло е едно от различните готварски масла, които се срещат в природата. Те са богати по съдържание, според к
  • популярни сравнения: Разлика между пиноцитоза и медиирана от рецептора ендоцитоза

    Разлика между пиноцитоза и медиирана от рецептора ендоцитоза

    Основна разлика: Пиноцитозата е по същество процес на абсорбиране на течност заедно със съдържанието му в клетката. Рецепторно-медиираната ендоцитоза (RME) е процесът, чрез който клетката абсорбира хранителни вещества в клетката чрез селективни рецептори на клетъчната мембрана. И двата пиноцитоза и рецепторно-медиираната ендоцитоза са видове ендоцитоза. Ендоцитозата е процес, чрез който клетките абсорбират молекули, като ги поглъщат. Тези молекули често включват протеини и други вещества, които са важни з
  • популярни сравнения: Разлика между транссексуалните и хермафродитите

    Разлика между транссексуалните и хермафродитите

    Ключова разлика: Трансджендър е лице, което желае да бъде считано за член на противоположния пол. От друга страна, хермафродит е човек, който има както мъжки, така и женски репродуктивни органи. Транссексуалните хора могат да се идентифицират като хетеросексуални, хомосексуални, бисексуални, пансексуални, полисексуални или асексуални. Тя не се прила
  • популярни сравнения: Разлика между Господ и Бог

    Разлика между Господ и Бог

    Ключова разлика: “Господ” е заглавие, използвано като уважение към различни богове и божества. Вярва се, че Бог е върховният човек и основният обект на вярата. Бог е създател и защитник на вселената. Господ и Бог са едновременно заглавия, а не имена. В иврит Библията всемогъщият се нарича YHWH като произношение на произношението като “yahveh”. Бог е единствено

Избор На Редактора

Разлика между закона и законодателството

Ключова разлика: Законите всъщност са правила и насоки, които са създадени от социалните институции за управление на поведението. Тези закони се правят от правителствени служители, които в някои страни се избират от обществеността, за да представляват техните възгледи. С прости думи, законите са основно неща, които човек може и не може да направи. Законодателството е друг термин, който означава законен закон. Тези закони са приети от законодателен орган или управителен орган на дадена стра