Інтерфейс проти абстрактного класу в Java: у чому різниця?

Зміст:

Anonim

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

Інтерфейс - це проект, який можна використовувати для реалізації класу. Інтерфейс не містить конкретних методів (методів, що мають код). Всі методи інтерфейсу є абстрактними методами.

Неможливо створити екземпляр інтерфейсу. Однак класи, що реалізують інтерфейси, можуть бути створені в екземплярі. Інтерфейси ніколи не містять змінних екземпляра, але вони можуть містити загальнодоступні статичні кінцеві змінні (тобто змінні постійного класу)

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

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

Абстрактні класи дозволяють створювати креслення конкретних класів. Але клас успадкування повинен реалізовувати абстрактний метод.

Неможливо створити екземпляр абстрактних класів.

Важливі причини використання інтерфейсів

  • Інтерфейси використовуються для досягнення абстракції.
  • Призначений для підтримки динамічного дозволу методу під час виконання
  • Це допоможе вам досягти вільного зчеплення.
  • Дозволяє відокремити визначення методу від ієрархії успадкування

Важливі причини використання абстрактного класу

  • Абстрактні класи пропонують функціональність за замовчуванням для підкласів.
  • Надає шаблон для майбутніх конкретних класів
  • Допомагає визначити загальний інтерфейс для його підкласів
  • Абстрактний клас дозволяє повторно використовувати код.

Інтерфейс проти Анотація класу

Абстрактний клас дозволяє створювати функціональність, яку підкласи можуть реалізувати або замінити, тоді як інтерфейс дозволяє лише констатувати функціональність, але не реалізовувати. Клас може розширити лише один абстрактний клас, тоді як клас може реалізувати кілька інтерфейсів.

Параметри Інтерфейс Абстрактний клас
Швидкість Повільно Швидко
Множинні спадщини Впровадити кілька інтерфейсів Тільки один абстрактний клас
Структура Абстрактні методи Абстрактні та конкретні методи
Коли використовувати Майбутнє вдосконалення Щоб уникнути незалежності
Спадкування / реалізація Клас може реалізовувати кілька інтерфейсів Клас може успадкувати лише один абстрактний клас
Реалізація за замовчуванням Додаючи нові речі в інтерфейс, кошмаром є знайти всі реалізатори та реалізувати нещодавно визначені речі. У випадку з абстрактним класом ви можете скористатися реалізацією за замовчуванням.
Модифікатори доступу Інтерфейс не має модифікаторів доступу. Все, що визначено всередині інтерфейсу, вважається загальнодоступним модифікатором. Абстрактний клас може мати модифікатор доступу.
Коли використовувати Краще використовувати інтерфейс, коли різні реалізації використовують лише сигнатуру методу. Поліморфна ієрархія типів значень. Це слід використовувати, коли різні реалізації одного виду мають спільну поведінку.
Поля даних інтерфейс не може містити поля даних. клас може мати поля даних.
Багаторазове успадкування за замовчуванням Клас може реалізовувати численні інтерфейси. Клас успадковує лише один абстрактний клас.
Впровадження Інтерфейс абстрактний, тому він не може надати жодного коду. Абстрактний клас може дати повний код за замовчуванням, який слід замінити.
Використання модифікаторів Access Ви не можете використовувати модифікатори доступу для методу, властивостей тощо. Ви можете використовувати абстрактний клас, який містить модифікатори доступу.
Використання Інтерфейси допомагають визначити периферійні здібності класу. Абстрактний клас визначає ідентичність класу.
Визначені поля Жодні поля не можуть бути визначені Абстрактний клас дозволяє визначити як поля, так і константи
Спадщина Інтерфейс може успадкувати кілька інтерфейсів, але не може успадкувати клас. Абстрактний клас може успадкувати клас і кілька інтерфейсів.
Конструктор або деструктори Інтерфейс не може оголошувати конструктори або деструктори. Абстрактний клас може оголошувати конструктори та деструктори.
Обмеження розширень Він може розширювати будь-яку кількість інтерфейсів. Він може розширювати лише один клас або один абстрактний клас одночасно.
Анотація ключове слово В абстрактному ключовому слові інтерфейс не є обов'язковим для оголошення методу як абстрактного. В абстрактному класі абстрактне ключове слово є обов’язковим для оголошення методу абстрактним.
Тип класу Інтерфейс може мати лише загальнодоступні абстрактні методи. Абстрактний клас має захищені та загальнодоступні абстрактні методи.

Зразок коду для інтерфейсу та абстрактного класу в Java

Далі наведено зразок коду для створення інтерфейсу та абстрактного класу в Java

Синтаксис інтерфейсу

interface name{//methods}

Приклад інтерфейсу Java:

interface Pet {public void test();}class Dog implements Pet {public void test() {System.out.println("Interface Method Implemented");}public static void main(String args[]) {Pet p = new Dog();p.test();}}

Синтаксис абстрактного класу

abstract class name{// code}

Приклад абстрактного класу:

abstract class Shape {int b = 20;abstract public void calculateArea();}public class Rectangle extends Shape {public static void main(String args[]) {Rectangle obj = new Rectangle();obj.b = 200;obj.calculateArea();}public void calculateArea() {System.out.println("Area is " + (obj.b * obj.b));}}