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

Интерфейсът ще определи какво клас трябва да направи, но не и как. По същество това е план за класа. Променливите, декларирани в интерфейс, са публични, статични и крайни по подразбиране. Клас, който е деклариран с ключова дума „абстракт“, се нарича абстрактна класа. Класът, който се извлича от класа „Абстракт“, трябва да дефинира всички методи, които са декларирани като абстрактни в абстрактния клас.

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

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

Какво е абстрактното?

Клас, който е деклариран с ключова дума „абстракт“, се нарича абстрактна класа. Класът Абстракт може да има абстрактни (метод без тяло) и конкретни методи (метод с тяло), за разлика от нормалния клас. Абстрактният клас не може да бъде инстанциран, т.е. не можем да създадем обект за него, но можем да имаме препратки към абстрактен клас чрез създаване на друг клас, който разширява абстрактния клас и осигурява прилагането на методи. Можем да използваме обект на дете (който е новосъздаден), за да наречем абстрактни и нормални методи. Той може да има конструктори, а абстрактният клас се извиква, когато се създаде наследствен екземпляр от клас. В Java можем да имаме абстрактен клас без абстрактна ключова дума, но тези класове не могат да бъдат инстанцирани, само наследени и могат да имат и крайни методи.

Сравнение между главата и интерфейса на Java срещу абстрактния клас (Инфографика)

По-долу са най-добрите 9 сравнения между Java интерфейс и абстрактен клас

Ключови разлики между интерфейса на Java срещу абстрактния клас

И двата интерфейса на Java срещу абстрактния клас са популярен избор на пазара; Нека да обсъдим някои от основните разлики между интерфейса на Java и абстрактния клас:

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

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

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

Основата на сравнението между Java интерфейс и абстрактен класАбстрактен класJava интерфейс
Тип методАбстрактният клас може да има както абстрактни (методи без тяло), така и нео-абстрактни (методи с тяло) методиВ интерфейса можем да имаме само абстрактни методи. От Java 8 интерфейсът може да има и статични и стандартни методи
СинтаксисАбстрактният клас може да бъде деклариран, както следва:
обществено абстрактно класно училище (Публични абстрактни класове за void ();
публична абстрактна невалидна сила ();)
Интерфейс може да бъде деклариран, както следва:
форма на публичен интерфейс (Void draw_rect (); void draw_square ();)
Крайна променливаАбстрактен клас може да има крайни и нефинални променливи.Като има предвид, че интерфейсът може да има само крайни променливи, тъй като променливите са крайни по подразбиране в интерфейса.
изпълнениеАбстрактен клас може да осигури прилагането на всички абстрактни методи в интерфейса.Като има предвид, че в интерфейса не можем да осигурим реализацията на абстрактен клас.
Променлив типАбстрактен клас може да включва всички видове променливи, т.е. крайни, нефинални, статични, нестатични, частни, публични и т.н.Като има предвид, че интерфейсът може да има само публични, статични и крайни променливи.
Членове на данните ДостъпностАбстрактният клас може да има членове на класа като частни, защитени, публични и т.н.Интерфейсът може да има само членове от публичен клас, тъй като членовете на интерфейсните данни по подразбиране са публични.
Наследяване срещу абстракцияАбстрактен клас може да бъде разширен с помощта на ключова дума „extends“ и трябва да се осигури прилагането на всички декларирани методи в родителския или абстрактния класИнтерфейсът може да бъде реализиран с помощта на ключова дума „интерфейс“ и трябва да предостави реализацията за всички методи, декларирани в интерфейса
Многократно изпълнениеАбстрактен клас може да разшири друг Java клас реализира множество интерфейсиИнтерфейсът може да разширява само друг интерфейс.
Кога да използватеАбстрактен клас трябва да се използва, когато някои класове трябва да споделят няколко реда код, тогава можем да поставим тези кодове в абстрактен клас и да се разширят от всички свързани класове.Интерфейс може да бъде използван, когато трябва да постигнем множество наследства, пълна абстракция чрез прилагане на всички методи, декларирани в интерфейс от клас, който реализира интерфейса.

Заключение - Java интерфейс срещу абстрактен клас

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

Препоръчителен член

Това е ръководство за основните разлики между интерфейса на Java и абстрактния клас. Тук също обсъждаме ключовите разлики в интерфейса на Java срещу абстрактния клас с инфографиката и таблицата за сравнение. Може да разгледате и следните статии -

  1. Колко полезни са въпросите и отговорите на C # за интервю?
  2. 8 Полезно сравнение-HTML5 срещу Flash
  3. Java срещу C # - 8 Важни разлики
  4. Руби срещу възел
  5. Сравнение между HTML5 и JavaScript
  6. ArrayList срещу Java Vector