Чим відрізняється інтерфейс від абстрактного класу
Чим відрізняється інтерфейс від абстрактного класу? - один з найпоширеніших питань на співбесідах на посаду розробника. Його завдання - перевірити, наскільки добре ви знайомі з об'єктно-орієнтованим програмуванням (ООП). Давайте розглянемо декілька відмінних рис.
1. Інтерфейс не може містити реалізацію, в той час як абстрактний клас - може. Інтерфейс лише містить чистий опис - «порожні» методи, які вам необхідно реалізувати в своєму класі, імплементує інтерфейс. У той же час абстрактний клас може мати один або кілька методів з реалізацією, які ви можете використовувати в своєму класі-нащадку.
2. Похідний клас може успадковувати тільки один абстрактний клас і «реалізувати» безліч різних інтерфейсів.
3. Абстрактний клас може мати властивості (поля) з різними модифікаторами доступу, інтерфейс - немає. Інтерфейс може містити тільки загальнодоступні константи (public final static)
4. Абстрактний клас ми успадковуємо (extends), інтерфейс - «імплементуємо» (implements).
5. При реалізації інтерфейсу ми зобов'язані реалізувати всі його методи. Спадкоємець абстрактного класу не зобов'язаний утримувати реалізацію абстрактних класів батька.
6. В абстрактному класі можна описати конструктор, в інтерфейсі - немає.