Інтерфейси Java створені для підтримки динамічного вибору (resolution) методів під час виконання програми. Інтерфейси схожі на класи, але на відміну від останніх у інтерфейсів немає змінних представників, а в оголошеннях методів відсутня реалізація.
Клас може мати будь-яку кількість інтерфейсів. Все, що потрібно зробити – це реалізувати в класі повний набір методів всіх інтерфейсів. Сигнатури таких методів класу повинні точно збігатися з сигнатурами методів інтерфейсу, які реалізовуються в цьому класі.
Інтерфейси мають свою власну ієрархію, яка є непересічною з ієрархією успадкування класів. Це надає можливість реалізувати один і той же інтерфейс в різних класах, ніяк не зв’язаних з ієрархією класового успадкування. У цьому і виявляється головна сила інтерфейсів.
Інтерфейси є певним аналогом механізму множинного успадкування в C++, але використовувати їх набагато легше.
Оператор interface
Визначення інтерфейсу схоже з визначенням класу, але відмінність полягає в тому, що в інтерфейсі відсутні оголошення даних і конструкторів. Загальна форма інтерфейсу наведена нижче:
|
|
interface ім’я {
тип_результату ім’я_методу1(список параметрів);
тип ім’я_final1_змінної = значення;
}
В оголошуваних в операторі interface методів відсутні оператори тіла. Оголошення методів завершується символом «;». У інтерфейсі можна оголошувати і змінні, при цьому вони неявно оголошуються final-змінними (це означає, що клас реалізації не може змінювати їх значення). Крім того, при оголошенні змінних в інтерфейсі їх обов’язково потрібно ініціалізувати константними значеннями.
Оператор implements
Оператор implements – це доповнення до визначення класу, яка реалізує деякий інтерфейс(и).
class ім’я_класу [extends суперклас][implements інтерфейс0 [, інтерфейс1…]]{тіло класу}
Якщо в класі реалізується декілька інтерфейсів, то їх імена розділяються комами.
Нижче наведені приклади використання даного оператора:
[слайд на стор.18-19, Lect_14.pdf]
Багатопотоковість в Java
Вбудована багато потоковість – істотна риса платформи Java. Вона підтримується як на мовному (синтаксичному) рівні, так і на рівні Java VM і бібліотек класів.
У багатьох випадках потоки Java дуже схожі на потоки POSIX (pthreads). Стандартна бібліотека містить у собі клас Thread з методами, що дозволяють ініціалізувати новий потік, завершити його виконання й перевірити поточний стан потоку. Інтеграція примітивів синхронізації безпосередньо в мову спрощує роботи з ними.