Посібник з Java Core

Що таке абстракція Коли ми говоримо слово “програма”, ми маємо на увазі сутність, яка вирішує певні завдання. Ми опускаємо той факт, що програма складається з об'єктів, методів, класів і т.д.

І тут ми можемо сказати, що програма – це абстракція.

Раніше ми вже обговорювали інкапсуляцію з прикладу полів класу. Тепер розглянемо ситуацію, коли ми "ховаємо" від користувача саму реалізацію певного функціоналу. Тобто, ми акцентуємо увагу на тому, яку роботу виконує клас, а не на тому, як саме її виконує.

У мові програмування Java, абстракція реалізується за допомогоюінтерфейсів таабстрактних класів.

Абстрактні класи

Абстрактним називають клас, який не може мати екземплярів та який може містити абстрактні методи (методи без реалізації). Щоб зробити клас абстрактним необхідно застосувати ключове словоabstract. Ось деякі дані про абстрактні класи:

  • Абстрактний клас не може мати жодного екземпляра.
  • Якщо ми успадковуємо абстрактний клас, ми повинні імплементувати всі його абстрактні методи (методи без реалізації).
  • Абстрактний клас може містити звичайні та/або абстрактні методи.
  • Якщо клас містить хоча б один абстрактний метод, то він повинен бути оголошений як абстрактний.

Для розуміння того, як це працює на практиці, розглянемо приклад простого застосування.

Приклад: Абстрактний клас Profession

В результаті роботи програми ми отримаємо, приблизно наступний результат:

Як бачите, ми можемо застосовувати таку форму створення екземпляра класу Developer, як

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

Інтерфейси

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

  • Інтерфейс може мати будь-яку кількість методів.
  • Інтерфейс не може мати екземпляра.
  • Інтерфейс немає конструктора.
  • Усі методи інтерфейсу абстрактні.
  • Усі поля інтерфейсу повинні мати модифікаториstatic таfinal.
  • Класи саме імплементують (реалізують) інтерфейси, а не успадковують.
  • Клас може імплементувати декілька інтерфейсів.

Для розуміння того, як це працює на практиці, розглянемо приклад простого застосування.

У цьому прикладі ми маємо інтерфеси Developer і Human, які мають свої методи. І два класи - JavaDeveloper і CppDeveloper, кожен з яких імпелементує обидва ці інтерфейси.

В результаті роботи програми ми отримаємо наступний результат:

Існує ряд правил реалізації інтерфейсів:

  • Клас може імплементувати будь-яку кількість інтерфейсів.
  • Інтерфейс може успадковувати інший інтерфейс (за аналогією до класів).

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

Розглянемо наступний приклад.

Приклад: У нас є інтерфейсJob, який має один методdoJob(). Інший інтерфейс –ProductManagement успадковує цей інтерфейс і додає свій власнийgetPowerOverDevelopers().

Клас ProductManager, який імплементує інтерфейсProductManagement, повинен реалізовувати всі методи цих класів.

У результаті роботи програми ми отримаємо наступний результат:

У цьому уроці ми глибше вивчили поняття абстракції та її реалізацію у мові програмування Java якабстрактних класів іінтерфейсів. Ми розглянули кілька прикладів із їх використанням.

У наступному уроці ми розглянемо структури даних у Java.