Абстрактний клас дуже схожий на інтерфейс, але концепція трохи заплутана для початківців OOP. Концептуально абстрактний клас виглядає так само, як інтерфейс, звичайно, без будь-якої реалізації, проте вони мають свою справедливу частку відмінностей. Хоча абстрактний клас може бути частково або повністю реалізований, інтерфейс повинен бути реалізований повністю. Ну, найбільш помітна різниця між ними полягає в тому, що абстрактний клас може мати реалізацію за замовчуванням, тоді як інтерфейс - це лише визначення методів, що містить лише декларації учасника. Давайте обговоримо теоретичні аспекти обох детально.
Абстрактний клас - це особливий тип класу, який виступає базою інших класів і не може бути ініційований. Логіка реалізації абстрактного класу забезпечується його похідними класами. Щоб зробити клас абстрактним, використовується "абстрактний" модифікатор, який означає, що деяка відсутність реалізації повинна бути реалізована в похідному від нього класі. Він містить як абстрактних, так і не абстрактних членів. Абстрактний клас призначений для забезпечення базової функціональності, яка може бути надано спільною та переопрацьованою кількома похідними класами. Корисно уникати будь-якого дублювання коду. Вони дуже схожі на інтерфейси, але з додатковою функціональністю.
Інтерфейс, з іншого боку, не є класом, який містить лише підпис функціональності. Це шаблон без реалізації. Концептуально кажучи, це лише визначення методів, яке містить лише декларацію членів. Це порожня оболонка, яка не містить реалізації її членів. Це як абстрактний базовий клас, який містить лише абстрактні члени, такі як методи, події, індексатори, властивості тощо. Його неможливо безпосередньо встановити, і його членів може реалізувати будь-який клас. Крім того, декілька інтерфейсів можуть бути реалізовані класом, однак клас може успадковувати лише один клас.
Анотація класу | Інтерфейс |
Абстрактний клас може мати всі модифікатори доступу для оголошення членів функцій, підрозділів та властивостей. | В інтерфейсі заборонено мати модифікатори доступу для декларування оголошень функцій, підрозділів, властивостей тощо. Усі члени вважаються неявними загальнодоступними. |
Клас може використовувати максимум один абстрактний клас. | Клас може успадкувати будь-яку кількість інтерфейсів. |
Множинне успадкування не підтримується в абстрактному класі. | Інтерфейс може підтримувати багатократне успадкування. |
Технічно це клас, який може містити або не визначати, і його реалізацію. | Інтерфейс може мати лише підпис функціональності, тому в основному це порожня оболонка. |
Абстрактний клас може містити членів. consts, визначені методи та заглушки методів. | Інтерфейс може містити лише методи та consts. |
Він визначає основну ідентичність класу і використовується для опису об'єктів одного типу даних. | Він використовується для опису периферійних здібностей класу. |
Члени абстрактного класу не можуть бути статичними, якщо це не Повний член. | Учасники інтерфейсу не можуть бути статичними. |
Він ідеально підходить для реалізацій одного типу та загальної поведінки. | Краще використовувати інтерфейси, якщо кілька реалізацій мають лише підписи методів. |
Він може мати декларацію конструктора. | У ньому не може бути оголошень конструктора. |
Абстрактний клас має заздалегідь визначені поля та обмеження. | Поля не можна визначити в інтерфейсах. |
Він може мати як абстрактні, так і не абстрактні методи. | Він може мати лише абстрактні методи. |
Чим відрізняється абстрактний клас від інтерфейсу? Це, мабуть, одне з найпоширеніших питань, яке задають у будь-якому технічному інтерв'ю. Ви, ймовірно, знайдете безліч інформації про абстрактні класи та інтерфейси в будь-якому навчальному посібнику C #, проте розуміння різниці між цими двома є досить важкою частиною. Ви можете консолідувати всю інформацію, яку ви можете знайти, і все ще не можете її отримати. Ну, концептуально обидва є найважливішими термінами в програмуванні і цілком однакові, однак вони сильно відрізняються з точки зору функціональності. Хоча абстрактний клас - це особливий тип класу, який виступає базою для інших класів, інтерфейс, з іншого боку, є лише порожньою оболонкою з лише деклараціями членів.