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

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

  • В Interface клас може реалізувати декілька інтерфейсів, тоді як клас може успадкувати лише один абстрактний клас.
  • В інтерфейсі немає модифікаторів доступу. Передбачається, що все, що визначено всередині інтерфейсу, має публічний модифікатор, тоді як абстрактний клас може мати модифікатор доступу.
  • Інтерфейс не може містити поля даних, тоді як абстрактний клас може мати поля даних.
  • Інтерфейси допомагають визначити периферійні можливості класу, тоді як абстрактний клас визначає ідентичність класу.

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

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

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

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

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

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

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

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

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

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

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

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

Зразок коду для інтерфейсу та абстрактного класу в 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 " + (b * b));
    }
}