Абстрактен клас срещу наследяване
Абстрактният клас и Наследяването са две важни обектно-ориентирани концепции, открити в много обектно-ориентирани езици за програмиране като Java. Абстрактният клас може да се разглежда като абстрактна версия на обикновен (конкретен) клас, докато наследяването позволява на нови класове да разширяват други класове. Абстрактният клас е клас, който не може да бъде инициализиран, но може да бъде разширен. Така че абстрактните класове са смислени само ако езикът за програмиране поддържа наследяване. В Java абстрактните класове се декларират с помощта на ключовата дума Abstract, докато ключовата дума Extends се използва за наследяване от (супер) клас.
Какво е абстрактен клас?
Обикновено абстрактните класове, известни също като абстрактни базови класове (ABC), не могат да бъдат създадени (не може да бъде създаден екземпляр на този клас). Така че абстрактните класове са смислени само ако езикът за програмиране поддържа наследяване (способност за създаване на подкласове от разширяване на клас). Абстрактните класове обикновено представляват абстрактна концепция или обект с частична или никаква реализация. Следователно абстрактните класове действат като родителски класове, от които се извличат дъщерни класове, така че дъщерният клас ще споделя непълните функции на родителския клас и може да се добави функционалност, за да ги завърши.
Абстрактните класове могат да съдържат абстрактни методи. Подкласовете, разширяващи абстрактен клас, могат да имплементират тези (наследени) абстрактни методи. Ако дъщерният клас имплементира всички подобни абстрактни методи, той е конкретен клас. Но ако не стане, дъщерният клас също става абстрактен клас. Всичко това означава, че когато програмистът номинира клас като Abstract, той казва, че класът ще бъде непълен и ще има елементи, които трябва да бъдат завършени от наследяващите подкласове. Това е добър начин за създаване на договор между двама програмисти, който опростява задачите при разработването на софтуер. Програмистът, който пише код за наследяване, трябва да следва точно дефинициите на метода (но разбира се може да има собствена реализация).
Какво е наследство?
Наследяването е обектно ориентирана концепция, която позволява на нови класове да разширяват други класове. Ключовата дума Extends се използва за прилагане на концепцията за наследяване в езика за програмиране Java. Наследяването по същество осигурява повторно използване на кода, като позволява разширяване на свойствата и поведението на съществуващ клас от новодефиниран клас. Когато нов подклас (или производен клас) разшири супер клас (или родителски клас), този подклас ще наследи всички атрибути и методи на супер класа. Подкласът може по желание да замени поведението (предоставяне на нова или разширена функционалност на методите), наследено от родителския клас. Обикновено един подклас не може да разшири множество супер класове (напр. в Java). Следователно не можете да използвате extends за множествено наследяване. За да имате множествено наследяване, трябва да използвате интерфейси.
Каква е разликата между абстрактния клас и наследяването?
Абстрактните класове обикновено представляват абстрактна концепция или обект с частична или никаква реализация. Наследяването позволява на нови класове да разширяват други класове. Тъй като абстрактните класове не могат да бъдат създадени, трябва да използвате концепцията за наследяване, за да използвате абстрактните класове. В противен случай абстрактният клас няма никаква полза. Абстрактните класове могат да съдържат абстрактни методи и когато класът е разширен, всички методи (абстрактни и конкретни) се наследяват. Наследеният клас може да имплементира всеки или всички методи. Ако всички абстрактни методи не са внедрени, тогава този клас също става абстрактен клас. Един клас не може да наследява от повече от един абстрактен клас (това не е качество на абстрактните класове само по себе си, а по-скоро ограничение на наследяването).
Свързани публикации:
Разлика между абстрактен клас и конкретен клас
Разлика между виртуално и абстрактно
Разлика между абстрактен клас и интерфейс
Разлика между внедрява и разширява
Разлика между графика и дърво
Filed Under: Програмиране Маркирани с: ABC, абстрактни, абстрактни базови класове, абстрактни класове, абстрактни класове, абстрактна ключова дума, абстрактни методи, конкретен клас, разширява ключова дума, наследство, клас наследяване, наследен клас, Java, множествено наследяване, обектно ориентирани концепции, обикновен клас, супер клас
За автора: Indika
Индика, BSc. Eng, MSECE Computer Engineering, PhD. Компютърни науки, е асистент и има научни интереси в областта на биоинформатиката, изчислителната биология и биомедицинската обработка на естествен език.
Коментари
-
Джейсън казва
30 август 2017 г. в 13:25 ч.
Благодарим ви, че обяснихте разликата. Всичките ми въпроси са решени с това.
Отговор
-
Aus казва
10 май 2019 г. в 15:04
най-добрият отговор в мрежата, Учителят не обяснява нищо и няма смисъл, моно тон mf. Ето как обяснявате концепциите.
Отговор
Оставете отговор Отказ от отговор
Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с
Коментар
Име
Имейл
уебсайт