Обидва абстрактні класи та інтерфейс в основному використовуються для абстрагування, проте вони сильно відрізняються один від одного. Обидва є основною частиною Java, але мають свої власні програми. Хоча обидва терміни можуть бути синонімами один одного, вони не можуть бути взаємозамінні.
Між ними є суттєві відмінності. Хоча метод інтерфейсу за замовчуванням абстрактний, конспект може містити як абстрактні, так і не абстрактні методи. Отже, оскільки Java 8, інтерфейси також мають реалізацію методів, і вони можуть мати як статичні, так і типові методи в Java. Давайте детально вивчимо різницю між ними.
Абстрактний клас на Java - це клас, який оголошується абстрактним - він може містити або не містити абстрактних методів. Він досить схожий на інтерфейс Java, за винятком того факту, що він може містити реалізацію методу за замовчуванням. Як і в об'єктно-орієнтованому програмуванні, абстракція в Java досягається за допомогою абстрактних класів та інтерфейсів. У Java абстракція означає приховувати невідповідні деталі від користувача, щоб зосередитись лише на важливих деталях, щоб підвищити ефективність, тим самим зменшивши складність. Ключове слово "абстракт" використовується для створення абстрактного класу перед ключовим словом класу в декларації класу.
Абстрактний клас може містити або не може містити методи абстрагування (методи без тіла), але якщо клас має принаймні один метод абстракції, він повинен бути оголошений абстрактним. Однак неабразивні методи можуть використовуватися лише в абстрактному класі, але лише для реалізації поведінки за замовчуванням. Методи в абстрактному класі можуть мати модифікатори доступу, такі як приватний, загальнодоступний, статичний та захищений, залежно від рівня видимості. Абстрактний клас не може бути ініційований, і він не забезпечує 100-відсоткову абстракцію через те, що він може мати конкретний метод.
Хоча інтерфейс схожий на клас, але це не так. Оскільки Java не підтримує декілька спадкових даних, іноді інтерфейс ідеально підходить для надання бази для ієрархії класів. Інтерфейс - це більше креслення класу, який також використовується для досягнення абстракції на Java. Він містить абстрактні методи та статичні константи. Простіше кажучи, інтерфейс - це сукупність абстрактних методів, які використовуються для визначення поведінки, яку повинен реалізувати клас. На відміну від абстрактного класу, інтерфейс забезпечує повну абстракцію в Java. Він може мати як методи, так і змінні, як і клас, однак методи, оголошені в інтерфейсі, за замовчуванням абстрактні.
Анотація класу | Інтерфейс |
Абстрактне ключове слово використовується для створення абстрактного класу, і його можна використовувати методами. | Інтерфейсне ключове слово використовується для створення інтерфейсу, але його не можна використовувати з методами. |
Клас може поширювати лише один абстрактний клас. | Клас може реалізувати більше одного інтерфейсу. |
Абстрактний клас може мати як абстрактні, так і не абстрактні методи. | Інтерфейс може мати лише абстрактні методи. |
Змінні за замовчуванням не є остаточними. Він може містити не остаточні змінні. | Змінні за замовчуванням в інтерфейсі є остаточними. |
Абстрактний клас може забезпечити реалізацію інтерфейсу. | Інтерфейс не може забезпечити реалізацію абстрактного класу. |
Він може мати методи з реалізаціями. | Він забезпечує абсолютну абстракцію і не може мати реалізацію методу. |
Він може мати публічні, приватні, статичні та захищені модифікатори доступу. | Методи неявно публічні та абстрактні в інтерфейсі Java. |
Він не підтримує багатократне успадкування. | Він підтримує безліч спадків. |
Він ідеально підходить для повторного використання коду та еволюції. | Він ідеально підходить для оголошення типу. |
Для абстрагування використовують як абстрактний клас, так і інтерфейс; однак вони мають справедливу частку відмінностей. Основна відмінність між ними полягає в методах абстракції. Хоча перші можуть або не можуть мати абстрактні методи, останні є неявно абстрактними. Абстрактний клас може мати як абстрактні, так і не абстрактні методи. Інтерфейс, з іншого боку, може мати лише абстрактні методи, таким чином вони не можуть мати реалізацію, що означає, що інтерфейс не може мати неабразивні методи. Абстрактний клас не може бути ініційованим, що забороняє створення об'єкта. Інтерфейс, з іншого боку, може виглядати як клас, але це не так.