Яка різниця між абстрактним типом даних та інтерфейсом у Java?

0 Comments

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

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

Комбінація даних разом із методами називається абстрактним типом даних (ADT). Інтерфейс Java — це спосіб указати (але не реалізувати) ADT. Він визначає імена, параметри та типи повернення (тобто заголовок) методів ADT.

Змінні в абстрактних класах можуть мати кінцеві, нефінальні, статичні та нестатичні змінні. В інтерфейсі змінні неявно встановлюються як public , static і final . Вони розглядаються як константи і не можуть бути перепризначені.

Це різні речі. ADT — це модель або концепція, яка визначає, як поводиться тип (тобто визначає, як поводяться всі операції над ним). Абстрактний клас — це тип, який не забезпечує визначення хоча б однієї зі своїх операцій. Абстрактний клас може використовуватися для представлення ADT, але не є ADT.

Абстрактні класи діють як схеми для класів і можуть охоплювати як абстрактні, так і конкретні методи, тоді як інтерфейси встановлюють контракти, яких повинні дотримуватися класи, і підтримувати множинне успадкування, тим самим підвищуючи гнучкість і можливість повторного використання коду.