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

Обидва абстрактні класи та інтерфейс в основному використовуються для абстрагування, проте вони сильно відрізняються один від одного. Обидва є основною частиною Java, але мають свої власні програми. Хоча обидва терміни можуть бути синонімами один одного, вони не можуть бути взаємозамінні.

Між ними є суттєві відмінності. Хоча метод інтерфейсу за замовчуванням абстрактний, конспект може містити як абстрактні, так і не абстрактні методи. Отже, оскільки Java 8, інтерфейси також мають реалізацію методів, і вони можуть мати як статичні, так і типові методи в Java. Давайте детально вивчимо різницю між ними.

Що таке абстрактний клас на Java?

Абстрактний клас на Java - це клас, який оголошується абстрактним - він може містити або не містити абстрактних методів. Він досить схожий на інтерфейс Java, за винятком того факту, що він може містити реалізацію методу за замовчуванням. Як і в об'єктно-орієнтованому програмуванні, абстракція в Java досягається за допомогою абстрактних класів та інтерфейсів. У Java абстракція означає приховувати невідповідні деталі від користувача, щоб зосередитись лише на важливих деталях, щоб підвищити ефективність, тим самим зменшивши складність. Ключове слово "абстракт" використовується для створення абстрактного класу перед ключовим словом класу в декларації класу.

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

Що таке інтерфейс?

Хоча інтерфейс схожий на клас, але це не так. Оскільки Java не підтримує декілька спадкових даних, іноді інтерфейс ідеально підходить для надання бази для ієрархії класів. Інтерфейс - це більше креслення класу, який також використовується для досягнення абстракції на Java. Він містить абстрактні методи та статичні константи. Простіше кажучи, інтерфейс - це сукупність абстрактних методів, які використовуються для визначення поведінки, яку повинен реалізувати клас. На відміну від абстрактного класу, інтерфейс забезпечує повну абстракцію в Java. Він може мати як методи, так і змінні, як і клас, однак методи, оголошені в інтерфейсі, за замовчуванням абстрактні.

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

  1. “Множинне спадкування” абстрактного класу та інтерфейсу на Java - Незважаючи на те, що і абстрактний клас, і інтерфейс в основному використовуються для абстрагування, вони сильно відрізняються один від одного. Хоча абстрактний клас - це клас, інтерфейс - це інтерфейс. Це означає, що в той час як інтерфейс може розширювати лише інший Java-інтерфейс, абстрактний клас може реалізовувати в Java декілька спадків. Ну, Java не підтримує декілька успадкованих, але можна реалізувати декілька спадків у Java.
  2. "Тип методу" абстрактного класу та інтерфейсу на Java - Друга основна відмінність між ними полягає в тому, що хоча інтерфейс може мати лише абстрактні методи, абстрактний клас може мати як абстрактні, так і не абстрактні методи. Однак, оскільки Java 8, в інтерфейсі можуть бути і методи за замовчуванням, і статичні.
  3. “Модифікатори доступу” абстрактного класу та інтерфейсу на Java - Абстрактний клас може мати публічні, приватні та захищені модифікатори доступу, однак методи інтерфейсу неявно публічні та абстрактні. Ви не можете використовувати будь-який інший модифікатор доступу з методами інтерфейсу '.
  4. «Впровадження» абстрактного класу та інтерфейсу на Java - Абстрактний клас може забезпечити реалізацію інтерфейсу. Інтерфейс, з іншого боку, не може забезпечити реалізацію абстрактного класу.
  5. "Ключове слово" абстрактного класу та інтерфейсу на Java- Хоча ключове слово "абстракт" використовується для оголошення абстрактного методу класу абстрактним, однак інтерфейси - це зовсім інша історія; вони можуть мати лише публічні, статичні кінцеві константи та декларації методів.
  6. «Використання» абстрактного класу та інтерфейсу на Java - Хоча інтерфейс ідеально підходить для оголошення типу, абстрактний клас найкраще підходить для використання коду та перспективи еволюції. Інтерфейс схожий на клас, але це не клас.
  7. «Надійність» абстрактного класу та інтерфейсу на Java- Інша основна відмінність між абстрактним класом та інтерфейсом полягає в тому, що перший є трохи швидшим, ніж останній, оскільки пошук, як правило, бере участь в інтерфейсі перед тим, як будь-який перекритий метод викликається на Java.
  8. "Кінцеві змінні" абстрактного класу та інтерфейсу на Java - Змінні, задекларовані в інтерфейсі, за замовчуванням є остаточними, тоді як абстрактний клас може містити або не містити не кінцеві змінні.

Абстрактний клас проти інтерфейсу на Java: таблиця порівняння

Анотація класу Інтерфейс
Абстрактне ключове слово використовується для створення абстрактного класу, і його можна використовувати методами. Інтерфейсне ключове слово використовується для створення інтерфейсу, але його не можна використовувати з методами.
Клас може поширювати лише один абстрактний клас. Клас може реалізувати більше одного інтерфейсу.
Абстрактний клас може мати як абстрактні, так і не абстрактні методи. Інтерфейс може мати лише абстрактні методи.
Змінні за замовчуванням не є остаточними. Він може містити не остаточні змінні. Змінні за замовчуванням в інтерфейсі є остаточними.
Абстрактний клас може забезпечити реалізацію інтерфейсу. Інтерфейс не може забезпечити реалізацію абстрактного класу.
Він може мати методи з реалізаціями. Він забезпечує абсолютну абстракцію і не може мати реалізацію методу.
Він може мати публічні, приватні, статичні та захищені модифікатори доступу. Методи неявно публічні та абстрактні в інтерфейсі Java.
Він не підтримує багатократне успадкування. Він підтримує безліч спадків.
Він ідеально підходить для повторного використання коду та еволюції. Він ідеально підходить для оголошення типу.

Підсумкові точки щодо абстрактного класу та інтерфейсу на Java

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