Кључна разлика: Интерфејс или протокол је уобичајен начин који омогућава неповезаним објектима да међусобно комуницирају. Представља усаглашено понашање које олакшава интеракцију између два објекта. Апстрактна класа је класа објеката који се не могу инстанцирати или поставити инстанцу објекта. Ова класа можда нема имплементацију или може имати непотпуну имплементацију.
Јава је програмски језик, на који је утицао Ц језик. Већи део његове синтаксе произилази из Ц и Ц ++, али има мање објеката нижег нивоа од оба. Јава је програмски језик опште намене који је дизајниран тако да има мање зависности од имплементације у односу на претходне језике. Он је конкурентан, заснован на класи и објектно оријентисан језик.
Јава је развио Јамес Гослинг у Сун Мицросистемс и објављен је 1995. године. Првобитно је објављен као кључна компонента Јава платформе Сун Мицросистемс. Од тада је лиценцирала већину својих Јава технологија под ГНУ Генерал Публиц Лиценсе. То значи да је сва технологија лиценцирана под ГНУ Опћом јавном лиценцом отвореног кода и опћенито доступна бесплатно. Сун Мицросистемс се на крају спојио у Орацле Цорпоратион. Од 2012. године, Јава је постала један од најпопуларнијих програмских језика за употребу. Ово посебно важи за клијент-сервер веб апликације. Многи други системи су развили алтернативне имплементације Сун технологија, као што су ГНУ Цомпилер за Јава и ГНУ Цласспатх.
Апстрактна класа је класа објеката који се не могу инстанцирати или поставити инстанцу објекта. Ова класа можда нема имплементацију или може имати непотпуну имплементацију. Такође може да има апстрактне методе или особине које су заједничке свим под-класама. У неким програмским језицима, апстрактни типови без имплементације познати су као интерфејси. У Јави, апстрактни тип се може креирати помоћу кључне речи 'абстрацт' у дефиницији класе. Сврха је имати апстрактну класу за постављање свих метода које нису имплементиране у апстрактну класу и препустити подкласи да одреди како имплементирати те класе. Ако класа има једну апстрактну методу, класа мора бити декларисана као апстрактна класа, иако не треба да има барем једну јединствену методу за декларисање апстракта класе.
Малликталксјава.ин наводи главне разлике између интерфејса и апстракта као:
- Апстрактна класа има конструктора, али интерфејс не.
- Апстрактне класе могу имати имплементације за неке од својих чланова (Метходс), али интерфејс не може имати имплементацију за било који од својих чланова.
- Апстрактна настава треба да има подкласу која би била бескорисна.
- Интерфејси морају имати имплементације других класа које ће бити бескорисне
- Само интерфејс може проширити други интерфејс, али свака класа може проширити апстрактну класу.
- Све променљиве у интерфејсима су подразумевано коначне
- Интерфејси пружају облик вишеструког наслеђивања. Класа може проширити само још једну класу.
- Интерфејси су ограничени на јавне методе и константе без имплементације. Апстрактне класе могу имати дјелимичну имплементацију, заштићене дијелове, статичке методе, итд.
- Класа може имплементирати неколико интерфејса. Али у случају апстрактне класе, класа може проширити само једну апстрактну класу.
- Интерфејси су спори јер захтева додатну индиректност да би се пронашао одговарајући метод у класи. Апстрактни часови су брзи.
- Модификатор приступачности (јавно / приватно / интерно) је дозвољен за апстрактну класу. Интерфејс не дозвољава модификатор приступачности
- Апстрактна класа може да садржи комплетне или некомплетне методе. Интерфејси могу да садрже само потпис методе, али не и тело. Тако апстрактна класа може имплементирати методе, али интерфејс не може имплементирати методе.
- Апстрактна класа може да садржи поља, конструкторе, или деструкторе и својства имплементације. Интерфејс не може да садржи поља, конструкторе или деструкторе и има само потпис власништва, али нема имплементацију.
- Различити модификатори приступа као што су апстрактни, заштићени, интерни, јавни, виртуални итд. Корисни су у апстрактним класама, али не у интерфејсу.
- Апстрактни опсег је до изведене класе.
- Опсег интерфејса је до било ког нивоа његовог ланца наслеђивања.
Информације за табелу су захваљујући цодепројецт.цом и миндпрод.цом
Интерфејс | Абстрацт Цласс | |
Мултипле инхеританце | Класа може наследити неколико интерфејса. | Класа може наследити само једну апстрактну класу. |
Дефаулт имплементатион | Интерфејс не може дати никакав код, само потпис. | Апстрактна класа може да обезбеди комплетан, подразумевани код и / или само детаље који се морају заменити. |
Модификатори приступа | Интерфејс не може имати модификаторе приступа за субс, функције, својства итд. Све се претпоставља као јавно. | Апстрактна класа може да садржи модификаторе приступа за субс, функције, својства. |
Цоре вс. Перипхерал | Интерфејси се користе за дефинисање периферних способности класе. Другим речима, и човек и возило могу да наслеђују од интерфејса који се може мењати. | Апстрактна класа дефинише основни идентитет класе и тамо се користи за објекте истог типа. |
Хомогеност | Ако различите имплементације деле само потписе метода онда је боље користити интерфејсе. | Ако су различите имплементације исте врсте и користе заједничко понашање или статус онда је апстрактна класа боље користити. |
Брзина | Потребно је више времена да се пронађе стварна метода у одговарајућим класама. | Брзо |
Додавање функционалности | Ако додамо нову методу интерфејсу онда морамо да пратимо све имплементације интерфејса и дефинишемо имплементацију за нови метод. | Ако додамо нову методу у апстрактну класу онда имамо опцију пружања подразумеване имплементације и стога би сав постојећи код могао исправно функционисати. |
Поља и константе | Поља не могу бити дефинисана у интерфејсу. | Апстрактна класа може имати дефинисана поља и константе. |
Терсенесс | Декларације константи у интерфејсу су све претпостављене јавне статичке коначне. | Дељени код се може додати у апстрактну класу. |
Константе | Само статичне коначне константе, могу их користити без квалификација у класама које имплементирају интерфејс. | Могуће су и инстанце и статичке константе. И статички и инстанциони интиалисер код су такође могући за израчунавање константи. |
Погодност треће стране | Имплементација интерфејса може се додати било којој постојећој класи треће стране. | Класа треће стране мора бити преписана да би се проширила само из апстрактне класе. |
је -а-или-могу или могу-урадити | Интерфејси се често користе за описивање периферних способности класе, а не за њен централни идентитет, нпр. Класа Аутомобиле може имплементирати Рецицлабле сучеље, које би се могло примијенити на многе иначе потпуно неповезане објекте. | Апстрактна класа дефинише суштински идентитет његових потомака. Имплементирани интерфејси набрајају опште ствари које класа може да уради, а не оно што је класа. У контексту Јава, корисници би обично требали имплементирати Руннабле сучеље умјесто проширивања Тхреад-а, јер они заправо нису заинтересирани за пружање неке нове Тхреад функционалности, они обично само желе да неки код има способност самосталног рада. Желе да створе нешто што се може изводити у нити, а не у новој врсти нити. Сличан је - а вс. хас - дебата долази када одлучите да наслиједите или делегирате. |
Повезати | Корисник може да напише нови заменски модул за интерфејс који не садржи ниједан штапић кода који је заједнички са постојећим имплементацијама. Када корисник имплементира интерфејс, они почињу од нуле без икакве дефаулт имплементације. Корисник мора прибавити алате из других класа; ништа не долази са интерфејсом осим неколико константи. Ово даје кориснику слободу да примени радикално другачији унутрашњи дизајн. | Корисник мора користити апстрактну класу као-је за базу кода, са свим пратећим пртљагом, добрим или лошим. Аутор апстрактне класе је кориснику наметнуо структуру. |
Одржавање | Ако код клијента разговара само у смислу интерфејса, лако можете променити конкретну имплементацију иза ње, користећи фабричку методу. | Ако код клијента разговара само у терминима апстрактне класе, лако можете променити конкретну имплементацију иза ње, користећи фабрички метод. |