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

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

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

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

Виртуално срещу абстрактно

Virtual и Abstract са две ключови думи, използвани в повечето обектно-ориентирани (OO) програмни езици като Java и C. Въпреки че има малки разлики в това, което означава на различните езици, както виртуалните, така и абстрактните ключови думи осигуряват усещане за частично изпълнение на обектите, към които се прикрепят.

Абстракт

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

Виртуален

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

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

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

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