Оба апстрактна класа и сучеље се примарно користе за апстракцију, али се врло разликују једна од друге. Обоје су основни део Јаве, али имају сопствене апликације. Иако су оба термина међусобно синонимна, они се не могу међусобно заменити.
Постоје значајне разлике између њих две. Иако је метода интерфејса подразумевана апстрактна, сажетак може садржавати и апстрактне и неастрактне методе. Па, пошто је Јава 8, интерфејси такође имају имплементацију метода и они могу имати и статичке и задане методе у Јави. Хајде да детаљно проучимо разлику између то двоје.
Апстрактна класа на Јави је класа која се проглашава апстрактном - може или не садржи апстрактне методе. Прилично је сличан Јава сучељу, осим чињенице да може садржати подразумевану имплементацију метода. Као и код објектно оријентисаног програмирања, апстракција у Јави се постиже коришћењем апстрактних класа и сучеља. У Јави апстракција значи скривање небитних детаља од корисника да би се фокусирали само на битне детаље како би се повећала ефикасност и на тај начин смањила сложеност. Кључна реч „сажетак“ користи се за креирање апстрактне класе непосредно пре кључне речи класе у декларацији класе.
Апстрактна класа може или не мора садржавати методе апстракције (методе без тела), али ако класа има најмање једну методу апстракције, мора се прогласити апстрактном. Међутим, не-апстрактне методе могу се користити и у апстрактној класи, али само за имплементацију заданог понашања. Методе у апстрактној класи могу имати модификаторе приступа као што су приватни, јавни, статички и заштићени, у зависности од нивоа видљивости. Апстрактна класа не може бити инстанцирана и не пружа 100-постотну апстракцију због чињенице да може имати конкретан метод.
Иако интерфејс изгледа као класа, није. Будући да Јава не подржава више насљеђивања, интерфејс је понекад идеалан за пружање базе за хијерархију класе. Интерфејс је више цртеж класе која се такође користи за постизање апстракције у Јави. Садржи апстрактне методе и статичке константе. Једноставно речено, сучеље је збир апстрактних метода које се користе за специфицирање понашања које класа мора имплементирати. За разлику од апстрактне класе, интерфејс пружа потпуну апстракцију у Јави. Може имати и методе и променљиве баш као и класе, међутим методе декларисане у интерфејсу су подразумевано апстрактне.
Сажетак | Интерфејс |
Апстрактна кључна реч користи се за креирање апстрактне класе и може се користити методама. | Интерфејс кључна реч користи се за креирање интерфејса, али не може се користити методама. |
Класа може проширити само једну апстрактну класу. | Класа може имплементирати више интерфејса. |
Апстрактна класа може имати и апстрактне и не-апстрактне методе. | Интерфејс може имати само апстрактне методе. |
Променљиве променљиве нису коначне. Може садржавати не-коначне променљиве. | Променљиве су подразумевано коначне у интерфејсу. |
Апстрактна класа може да обезбеди имплементацију интерфејса. | Интерфејс не може да обезбеди имплементацију апстрактне класе. |
Може да има методе са имплементацијама. | Омогућава апсолутну апстракцију и не може имати имплементације метода. |
Може имати јавне, приватне, статичке и заштићене модификаторе приступа. | Методе су имплицитно јавне и апстрактне у Јава интерфејсу. |
Не подржава више насљеђивања. | Подржава више насљеђивања. |
Идеалан је за поновну употребу кода и перспективу еволуције. | Идеалан је за декларацију типа. |
И апстрактна класа и интерфејс се користе за апстракцију; међутим, они имају свој правични део разлика. Главна разлика између њих је вођена методама апстракције. Док први могу или не морају имати апстрактне методе, други су имплицитно апстрактни. Апстрактна класа може имати и апстрактне и не-апстрактне методе. Интерфејс, с друге стране, може имати само апстрактне методе, па не може имати имплементацију, што једноставно значи да интерфејс не може имати не-апстрактне методе. Апстрактна класа не може бити инстанцирана што забрањује стварање објекта. Са друге стране, интерфејс може изгледати као класа, али није.