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

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

Между тях има значителни разлики. Докато методът на интерфейса е абстрактен по подразбиране, той може да съдържа както абстрактни, така и нео-абстрактни методи. Е, тъй като Java 8, интерфейсите също имат реализации на методи и те могат да имат както статични, така и методи по подразбиране в Java. Нека проучим подробно разликата между двете.

Какво представлява абстрактният клас в Java?

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

Абстрактен клас може или не може да съдържа методи за абстракция (методи без тела), но ако клас има поне един метод за абстракция, той трябва да бъде обявен за абстракт. Неабстракционните методи обаче могат да се използват и само в абстрактен клас, но само за прилагане на поведение по подразбиране. Методите в абстрактен клас могат да имат модификатори на достъп като частни, обществени, статични и защитени, в зависимост от нивото на видимост. Абстрактният клас не може да бъде инстанциран и не осигурява 100-процентова абстракция поради факта, че може да има конкретен метод.

Какво е интерфейс?

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

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

  1. „Множествено наследяване“ на абстрактния клас и интерфейс в Java - Въпреки факта, че и абстрактният клас, и интерфейсът се използват предимно за абстракция, те са доста различни един от друг. Докато абстрактният клас е клас, интерфейсът е интерфейс. Това означава, че докато един интерфейс може да разширява само друг Java интерфейс, абстрактен клас може да реализира множество наследства в Java. Е, Java не поддържа множество наследявания, но човек може да реализира множество наследявания в Java.
  2. „Метод тип“ на абстрактния клас и интерфейс в Java - Втората основна разлика между двете е, че докато един интерфейс може да има само абстрактни методи, абстрактен клас може да има както абстрактни, така и не-абстрактни методи. Въпреки това, тъй като Java 8, интерфейсът може да има и методи по подразбиране и статични.
  3. „Модификатори на достъп“ на абстрактния клас и интерфейс в Java - Абстрактен клас може да има публични, частни и защитени модификатори на достъпа, но методите на интерфейса са имплицитно обществени и абстрактни. Не можете да използвате друг модификатор на достъп с интерфейсни методи “.
  4. „Прилагане“ на абстрактния клас и интерфейс в Java - Абстрактен клас може да осигури реализацията на интерфейс. Интерфейсът, от друга страна, не може да осигури реализацията на абстрактен клас.
  5. „Ключова дума“ на абстрактния клас и интерфейс в Java- Докато ключовата дума "абстракт" се използва за деклариране на абстрактния метод на клас като абстрактна, обаче интерфейсите са изцяло различна история; те могат да имат само публични, статични крайни константи и декларации за метод.
  6. „Използване“ на абстрактния клас и интерфейс в Java - Докато интерфейсът е идеален за деклариране на тип, абстрактен клас е най-подходящ за перспектива за повторно използване на кода и еволюция. Интерфейсът изглежда като клас, но не е клас.
  7. „Надеждност“ на абстрактния клас и интерфейс в Java- Друга основна разлика между абстрактен клас и интерфейс е, че първият е малко по-бърз от последния, тъй като търсенето обикновено е включено в интерфейс, преди да бъде извикан който и да е отменен метод в Java.
  8. „Крайни променливи“ на абстрактния клас и интерфейс в Java - Променливите, декларирани в даден интерфейс, са крайни по подразбиране, докато абстрактен клас може или не може да съдържа не-крайни променливи.

Абстрактен клас срещу интерфейс в Java: сравнителна таблица

Абстрактен клас интерфейс
Абстрактната ключова дума се използва за създаване на абстрактен клас и може да се използва с методи. Интерфейсната ключова дума се използва за създаване на интерфейс, но не може да се използва с методи.
Един клас може да разширява само един абстрактен клас. Един клас може да реализира повече от един интерфейс.
Абстрактният клас може да има както абстрактни, така и нео-абстрактни методи. Интерфейсът може да има само абстрактни методи.
Променливите по подразбиране не са окончателни. Може да съдържа променливи, които не са крайни. Променливите са крайни по подразбиране в интерфейс.
Абстрактен клас може да осигури реализацията на интерфейс. Интерфейсът не може да осигури реализацията на абстрактен клас.
Може да има методи с реализации. Той осигурява абсолютна абстракция и не може да има реализации на методи.
Той може да има публични, частни, статични и защитени модификатори за достъп. Методите са имплицитно обществени и абстрактни в Java интерфейса.
Не поддържа множество наследства. Той поддържа множество наследства.
Той е идеален за повторна употреба на код и перспектива за еволюция. Той е идеален за деклариране на тип.

Обобщени точки за абстрактния клас и интерфейс в Java

Както абстрактен клас, така и интерфейс се използват за абстракция; те обаче имат справедлив дял от разликите. Основната разлика между двете се определя от методите на абстракция. Докато първите могат или не могат да имат абстрактни методи, вторите са имплицитно абстрактни. Абстрактният клас може да има както абстрактни, така и нео-абстрактни методи. Интерфейсът, от друга страна, може да има само абстрактни методи, следователно те не могат да имат реализация, което просто означава, че интерфейсът не може да има нео-абстрактни методи. Абстрактният клас не може да бъде създаден, което забранява създаването на обект. Интерфейсът, от друга страна, може да изглежда като клас, но не е така.