Абстрактен клас срещу наследяване
 

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

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

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

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

Какво е наследяване?

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

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

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