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

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

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

Видео: Разлика между абстрактния клас и наследяването
Видео: Раздел, неделя 2 2024, Април
Anonim

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

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

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

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

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

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

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

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

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

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