Віртуальний проти абстрактних
Віртуальна та Анотація - це два ключові слова, які використовуються у більшості об'єктно-орієнтованих (OO) програмних мов, таких як Java та C #. Хоча є незначні відмінності в тому, що це означає на різних мовах, і віртуальний, і абстрактний ключові слова створюють відчуття часткової реалізації об'єктів, до яких він приєднується.
Анотація
Як правило, абстрактні класи, також відомі як абстрактні базові класи (ABC), неможливо створити екземпляр (екземпляр цього класу неможливо створити). Отже, абстрактні класи мають сенс мати лише тоді, коли мова програмування підтримує успадкування (здатність створювати підкласи з розширення класу). Абстрактні класи зазвичай являють собою абстрактне поняття або сутність з частковою або відсутнім виконанням. Таким чином, абстрактні класи діють як батьківські класи, з яких походять дочірні класи, так що дочірній клас поділиться неповними особливостями батьківського класу, а функція для їх завершення може бути додана. Анотаційні заняття можуть містити абстрактні методи. Підкласи, що розширюють абстрактний клас, можуть реалізувати ці (успадковані) абстрактні методи. Якщо дочірній клас реалізує всі такі абстрактні методи, це конкретний клас. Але якщо цього не відбувається, дочірній клас також стає абстрактним класом. Все це означає, що коли програміст призначить клас абстрактним, вона каже, що клас буде неповним і в ньому будуть елементи, які потрібно заповнити спадковими підкласами. Це хороший спосіб створити контракт між двома програмістами, який спрощує завдання з розробки програмного забезпечення. Програмісту, який пише код для спадкування, потрібно точно слідувати визначенням методу (але, звичайно, він може мати власну реалізацію). У Java та C # абстрактні класи та методи оголошуються за допомогою ключового слова Анотація.
Віртуальний
Віртуальні методи / функції надають можливість необов'язково переосмислювати її поведінку класом успадкування (використовуючи функцію з тією ж підписом). Поняття віртуальної функції важливо в наступному сценарії. Припустимо, клас похідний дочірнім класом, тоді, коли використовується об'єкт похідного класу, він може посилатися на об'єкт базового класу або похідний клас. Але поведінка виклику методу може бути неоднозначною, якщо методи базового класу будуть перекриті. Отже, для вирішення цієї двозначності використовується ключове слово Virtual. Якщо метод позначений віртуальним, то функція похідного класу називається (якщо така є), або ж називається функція базового класу. Наприклад, у C ++ для цього використовується саме ключове слово Virtual. У C # ключове слово використовується аналогічно, але крім того, для зміни всіх методів, що переосмислюються, слід використовувати ключове слово override. Але в Java немає явного віртуального ключового слова. Усі нестатичні методи вважаються віртуальними. Віртуальні функції без тіла називаються чистими віртуальними функціями. У Java та C # абстрактні методи насправді є чистою віртуальною.
Різниця між віртуальним та абстрактним
Хоча Анотація та Віртуальне є двома ключовими словами / поняттями, які надають сенс неповної реалізації асоційованим об'єктам, вони мають свої відмінності. Абстрактні методи (які повинні бути визначені у класах «Анотація») взагалі не мають реалізації, тоді як віртуальні методи можуть мати реалізацію. Якщо абстрактні методи поширюються конкретним класом, всі успадковані методи Анотації повинні бути реалізовані, тоді як успадковані віртуальні методи можуть бути або не можуть бути замінені.