Абстрактний клас проти інтерфейсу
Абстрактний клас та інтерфейс - це дві об'єктно-орієнтовані конструкції, що зустрічаються у багатьох об'єктно-орієнтованих мовах програмування, як Java. Абстрактний клас можна розглядати як абстрактну версію звичайного (конкретного) класу, тоді як інтерфейс можна розглядати як засіб реалізації контракту. Абстрактний клас - це клас, який не можна ініціалізувати, але його можна продовжити. Інтерфейс - це тип, який повинен бути реалізований іншими класами. У Java класи абстрагування оголошуються за допомогою ключового слова Анотація, а ключове слово інтерфейсу використовується для визначення інтерфейсу.
Що таке абстрактний клас?
Як правило, абстрактні класи, також відомі як абстрактні базові класи (ABC), неможливо створити екземпляр (екземпляр цього класу неможливо створити). Отже, абстрактні класи мають сенс мати лише тоді, коли мова програмування підтримує успадкування (здатність створювати підкласи з розширення класу). Абстрактні класи зазвичай являють собою абстрактне поняття або сутність з частковою або відсутнім виконанням. Тому абстрактні класи діють як батьківські класи, з яких походять дочірні класи, так що дочірній клас поділиться неповними особливостями батьківського класу, а функція для їх завершення може бути додана.
Анотаційні заняття можуть містити абстрактні методи. Підкласи, що розширюють абстрактний клас, можуть реалізувати ці (успадковані) абстрактні методи. Якщо дочірній клас реалізує всі такі абстрактні методи, це конкретний клас. Але якщо цього не відбувається, дочірній клас також стає абстрактним класом. Все це означає, що коли програміст призначить клас абстрактним, вона каже, що клас буде неповним і в ньому будуть елементи, які потрібно заповнити спадковими підкласами. Це хороший спосіб створити контракт між двома програмістами, який спрощує завдання з розробки програмного забезпечення. Програмісту, який пише код для успадкування, потрібно точно слідувати визначенням методу (але, звичайно, він може мати власну реалізацію).
Що таке інтерфейс?
Інтерфейс - це абстрактний тип, який використовується для визначення договору, який повинен бути реалізований класами, які реалізують цей інтерфейс. Ключове слово інтерфейсу використовується для визначення інтерфейсу, а ключове слово Implements використовується для реалізації інтерфейсу класом (мовою програмування Java). Зазвичай інтерфейс містить лише підписи методів та постійні декларації. Будь-який інтерфейс, який реалізує певний інтерфейс, повинен реалізовувати всі методи, визначені в інтерфейсі, або бути оголошеним абстрактним класом. У Java тип посилання на об'єкт може бути визначений як тип інтерфейсу. Але цей об'єкт повинен бути або нульовим, або повинен містити об’єкт класу, який реалізує саме цей інтерфейс. Використовуючи ключове слово Implements на Java, ви можете реалізувати декілька інтерфейсів до одного класу.
Яка різниця між абстрактним класом та інтерфейсом?
Абстрактні класи зазвичай являють собою абстрактне поняття або сутність з частковою або відсутнім виконанням. З іншого боку, інтерфейс - це абстрактний тип, який використовується для визначення договору, який повинен бути реалізований класами. Абстрактні класи повинні бути успадковані (або розширені), тоді як інтерфейси повинні бути реалізовані. Абстрактні класи можуть містити абстрактні методи, тоді як інтерфейс повинен містити лише абстрактні методи. Абстрактні класи можуть містити будь-які змінні, але інтерфейси можуть визначати лише константи. Клас не може успадковувати більше ніж один абстрактний клас, але може реалізувати кілька інтерфейсів. Інтерфейс не може реалізувати інший інтерфейс. Однак інтерфейс може розширити клас.