Абстрактні класи та інтерфейси Схожості: (1) може бути успадкованим (2) не може бути інстанційований (3) може містити декларації методів (4) Похідний клас повинен реалізувати нереалізований метод Категорія: (1) Абстрактні базові класи можуть визначати поля, властивості та реалізації методів. Інтерфейси можуть визначати лише атрибути, індексери, події та оголошення методів і не можуть містити поля. (2) Абстрактний клас — це неповний клас, який потребує подальшого доопрацювання, тоді як інтерфейс — це поведінкова норма. Власні інтерфейси Microsoft завжди мають поле для доведення здатності, що є вираженням «Я можу це зробити...» ” (3) Інтерфейси можуть бути реалізовані кілька разів, а абстрактні класи можуть успадковуватися лише однією особою (4) Абстрактні класи більш визначені між низкою тісно пов'язаних класів, тоді як більшість інтерфейсів є слабо пов'язаними класами, які всі реалізують певну функцію (5) Абстрактні класи — це поняття, абстраговані з низки споріднених об'єктів, тому вони відображають внутрішню спільність речей; Інтерфейс — це функціональна конвенція, визначена для задоволення зовнішніх викликів, тому вона відображає зовнішні характеристики речей (6) Інтерфейс фактично не має жодних специфічних характеристик спадкування, він лише обіцяє методи, які можна викликати (7) Інтерфейси можуть використовуватися для підтримки зворотних викликів, але спадковість не має цієї функції (8) Конкретні методи, реалізовані абстрактними класами, за замовчуванням є віртуальними, але методи інтерфейсу в класі, які реалізують інтерфейс, за замовчуванням не є віртуальними, звісно, їх також можна оголосити віртуальними (9) Якщо абстрактний клас реалізує інтерфейс, метод в інтерфейсі може бути відображений у абстрактний клас як абстрактний метод без необхідності його реалізувати, а метод у інтерфейсі може бути реалізований у підкласі абстрактного класу
|