Різниця між абстрактним класом та інтерфейсом

Абстрактний клас проти інтерфейсу

Абстрактний клас (або тип) - це тип номінативного типу, оголошений програмою. Хоча назва посилається на таке, абстрактний клас може включати абстрактні методи чи властивості. Клас розрізнення стосується різних мовних конструкцій, які можуть бути використані для реалізації абстрактних типів. Абстрактні класи можуть бути охарактеризовані питанням дизайну, який відповідає найкращому об’єктно-орієнтованому програмуванню та їх незакінченій природі.

Інтерфейс - це абстрактний тип, який повинні застосовувати класи, щоб вказати інтерфейс (загалом кажучи). Інтерфейси можуть містити лише підписи методів та постійні декларації (як статичні, так і кінцеві), ніколи не визначаються методами. Інтерфейси імітують багато успадкованих даних і використовуються для кодування подібності, поділеної між різними типами класів.

Абстрактні типи можна створити, позначити чи змоделювати кількома різними способами. Програміст може позначати абстрактні типи, використовуючи явне абстрактне ключове слово, включаючи один або кілька методів у визначення класу, успадковуючи від іншого абстрактного типу без перекреслення відсутніх функцій, необхідних для завершення визначення класу, або шляхом надсилання певного методу до орієнтованого на об'єкт мова програмування, відома як ця, яка не реалізує метод безпосередньо.

Інтерфейси можна визначити за допомогою абстрактних методів. Класи також можуть бути реалізовані в інтерфейсах. Якщо клас реалізує інтерфейс і не реалізує всі його методи, слід використовувати конспект означувача, інакше цей означувач не потрібен (оскільки всі інтерфейси за своєю суттю абстрактні). Класи можуть також реалізувати кілька інтерфейсів.

Хоча інтерфейси використовуються для визначення загальних інтерфейсів, абстрактні типи можуть використовуватися для визначення та застосування протоколу (це набір операцій, які повинні підтримувати всі об'єкти, що реалізують потрібний протокол). Абстрактні типи не зустрічаються в мовах без підтипу. Оскільки такі підтипи змушені реалізовувати всю необхідну функціональність, забезпечуючи правильність виконання програми. Абстрактні типи можуть бути створені декількома способами: повні абстрактні базові класи - це класи, які явно оголошуються абстрактними, або містять абстрактні (нереалізовані) методи; Загальні об'єкти Lisp-об'єктів включають міксини, які базуються на системі «Ароматизатори»; Ява, звичайно; і риси, яка виступає як розширення для Smalltalk.

Підсумок:
1. Абстрактні класи (або типи) декларують програми; інтерфейси - це абстрактні типи, які повинні застосовувати всі класи, щоб вказати їх інтерфейс.
2. Абстрактні типи можна позначити за допомогою явного ключового слова; інтерфейси за своєю суттю абстрактні, тому їх не потрібно позначати за допомогою ключового слова взагалі (якщо певний клас не реалізує інтерфейс, але не реалізує всі його методи).