Відмінності між інтерфейсом Java та абстрактним класом

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

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

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

Що таке Анотація?

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

Порівняння між собою та Інтерфейсом Java (Інфографіка)

Нижче наведено найкращі 9 порівнянь між інтерфейсом Java та абстрактним класом

Ключові відмінності між інтерфейсом Java та абстрактним класом

І інтерфейс Java проти абстрактного класу є популярним вибором на ринку; Давайте обговоримо деякі основні відмінності між інтерфейсом Java та абстрактним класом:

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

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

Далі йде таблиця порівняння між інтерфейсом Java та класом абстрактних

Основи порівняння між інтерфейсом Java та абстрактним класомАнотація класуІнтерфейс Java
Тип методуКлас "Анотація" може мати як абстрактні (методи без тіла), так і не абстрактні (методи з тілом) методиВ інтерфейсі ми можемо мати лише абстрактні методи. У Java 8 інтерфейс також може мати статичні та типові методи
СинтаксисАбстрактний клас можна оголосити так:
публічна абстрактна школа класів (Публічні абстрактні пустові класи ();
публічна абстрактна недійсна сила ();)
Інтерфейс можна оголосити так:
форма публічного інтерфейсу (void draw_rect (); void draw_square ();)
Кінцева зміннаАбстрактний клас може мати кінцеві та не завершальні змінні.Тоді як інтерфейс може мати лише остаточні змінні, оскільки змінні є остаточними за замовчуванням в інтерфейсі.
ВпровадженняАбстрактний клас може забезпечити реалізацію всіх абстрактних методів в інтерфейсі.Тоді як в інтерфейсі ми не можемо забезпечити реалізацію абстрактного класу.
Змінного типуАбстрактний клас може містити всі типи змінних, тобто кінцеві, не остаточні, статичні, нестатичні, приватні, загальнодоступні тощо.Тоді як інтерфейс може мати лише загальнодоступні, статичні та кінцеві змінні.
Доступність даних для учасниківАбстрактний клас може мати членів класу як приватних, захищених, громадських тощо.Інтерфейс може мати лише членів публічного класу, оскільки учасники даних інтерфейсу за замовчуванням є загальнодоступними.
Спадщина проти абстракціїАбстрактний клас можна розширити, використовуючи ключове слово "extends", і потрібно забезпечити реалізацію всіх заявлених методів у батьківському або абстрактному класіІнтерфейс може бути реалізований за допомогою ключового слова "інтерфейс" і потрібно забезпечити реалізацію для всіх методів, оголошених в інтерфейсі
Багаторазова реалізаціяАбстрактний клас може розширювати інший клас Java, що реалізує декілька інтерфейсівІнтерфейс може поширювати лише інший інтерфейс.
Коли використовуватиАбстрактний клас потрібно використовувати, коли деяким класам потрібно поділити кілька рядків коду, тоді ми можемо помістити ці коди в абстрактний клас і розширити на всі пов'язані класи.Інтерфейс може бути використаний, коли нам потрібно досягти декількох спадків, повної абстракції, реалізуючи всі методи, оголошені в інтерфейсі класом, який реалізує інтерфейс.

Висновок - інтерфейс Java проти абстрактного класу

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

Рекомендована стаття

Це було керівництвом щодо основних відмінностей між інтерфейсом Java та абстрактним класом. Тут ми також обговорюємо ключові відмінності інтерфейсу Java від абстрактного класу з інфографікою та таблицею порівняння. Ви також можете переглянути наступні статті -

  1. Наскільки корисні запитання та відповіді щодо інтерв'ю C #?
  2. 8 Корисне порівняння-HTML5 проти Flash
  3. Java проти C # - 8 Важливі відмінності
  4. Рубі проти Вузла
  5. Порівняння HTML5 та JavaScript
  6. ArrayList vs Java Vector