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

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

Видео: Разлика между абстрактния клас и интерфейса

Видео: Разлика между абстрактния клас и интерфейса
Видео: Java Абстрактный класс VS Интерфейс 2024, Декември
Anonim

Абстрактен клас срещу интерфейс

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

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

Обикновено абстрактните класове, известни също като абстрактни базови класове (ABC), не могат да бъдат създадени (екземпляр на този клас не може да бъде създаден). И така, абстрактните класове имат смисъл само ако езикът за програмиране поддържа наследяване (възможност за създаване на подкласове от разширяване на клас). Абстрактните класове обикновено представляват абстрактна концепция или обект с частично или без изпълнение. Следователно, абстрактните класове действат като родителски класове, от които се извличат дъщерни класове, така че дъщерният клас ще споделя непълните характеристики на родителския клас и функционалността може да бъде добавена, за да ги завърши.

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

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

Интерфейсът е абстрактен тип, който се използва за определяне на договор, който трябва да бъде изпълнен от класове, които реализират този интерфейс. Ключовата дума интерфейс се използва за дефиниране на интерфейс, а ключовата дума Implements се използва за внедряване на интерфейс от клас (на програмен език Java). Обикновено интерфейсът ще съдържа само подписи на методи и константни декларации. Всеки интерфейс, който реализира определен интерфейс, трябва да реализира всички методи, дефинирани в интерфейса, или трябва да бъде деклариран като абстрактен клас. В Java типът на препратка към обект може да бъде дефиниран като тип интерфейс. Но този обект трябва да е нула или да съдържа обект от клас, който реализира този конкретен интерфейс. Използвайки ключова дума Implements в Java, можете да внедрите множество интерфейси в един клас.

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

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

Препоръчано: