Об’єктно-орієнтоване програмування. Java. Характеристика інтерфейсів: дані інтерфейсів.

Java надає програмісту ще один засіб, споріднене класами, — інтерфейси. Інтерфейс — це набір абстрактних методів, які не містять ніякого коду. За своїм призначенням інтерфейси схожі на абстрактні класи, хоча між ними є деякі істотні відмінності. Так, наприклад, інтерфейси, на відміну від абстрактних класів, можуть бути тільки public або private. Методи, описані усередині інтерфейсів, завжди доступні (public) і абстрактні (abstract). Дані, декларовані в інтерфейсі, на початку мають атрибути final, public і static, тобто незмінюваність. Іноді це зручно, а іноді накладає серйозні обмеження на застосування інтерфейсів. Але тут уже нічого не вдієш — такі правила мови. Інтерфейси дають можливість програмісту описувати набори методів, які має реалізувати клас. Приміром, стандартний інтерфейс для створення багатопоточних додатків Runnable задається наступним чином: shape [0]. Draw (); / / Викликає Point.Draw (); shape [1]. Draw (); / / Викликає Circle.Draw (); shape [2]. Draw (); / / Викликає Square.Draw (); Даний опис встановлює прототип для методу Run, необхідного для запуску нового потоку виконання. Для того, щоб використовувати інтерфейси, від них повинен бути успадкований клас, який реалізує всі шаблони абстрактних методів, визначених у інтерфейсі. Це можна зробити, використовуючи ключове слово implements. Так, опис класу потоку зможе виглядати таким чином: public NewThread implements Runnable (
public void run () (
/ / Тут запускається новий потік
/ / Виконання
) ) Зверніть увагу: ключове слово implements (реалізує) стоїть в тому місці, де зазвичай розташовується ключове слово extends, що описує відношення спадкоємства. Але трапляються й випадки, коли який-небудь клас успадковує методи іншого класу і одночасно реалізує якийсь інтерфейс:
public class MyApplet extends Applet implements Runnable Після такого спрощеного введення дозволю собі описати поняття і синтаксис інтерфейсів знову, але вже більш формально. Отже, інтерфейс — це набір описів методів без реалізації і констант. Такий засіб може знадобитися для організації успадкування з будь-якого місця ієрархії. Описавши, приміром, інтерфейс CustomLook з методом CustomPaint для створення елементів інтерфейсу з новим зовнішнім виглядом, ми можемо створювати по-новому виглядають елементи на базі стандартних. При цьому можна з однаковим успіхом створити на базі інтерфейсу CustomLook новий вигляд кнопки або новий рядок введення, і при цьому не має значення, що кнопка та рядок введення розташовуються в різних місцях ієрархії класів. Головне те, що їх об’єднує, — необхідність реалізувати власний метод CustomPaint для нестандартного відображення елемента. Тому відзначимо наступні випадки застосування інтерфейсів: якщо різні класи, розташовані в різних місцях ієрархії, мають якусь спільність; якщо кілька класів повинні реалізувати якийсь загальний набір методів; якщо потрібно створити інтерфейс без розкриття деталей реалізації класу. Інтерфейси описуються за такою схемою: public interface CustomLook
(
public abstract void NotifyStartPaint ();
public abstract void CustomPaint ();
)
Після того, як інтерфейс декларований, його ім’я можна використовувати поряд зі стандартними типами і класами. Повертаючись до прикладу створення елементів користувальницького інтерфейсу з новим зовнішнім виглядом, можна сказати, що ви маєте право створювати змінні типу CustomLook. Виникає цікава можливість: ви можете зберігати в масиві елементів CustomLook будь-які класи, успадковані від нього (поліморфізм), і передавати ці класи як параметр типу CustomLook, інакше кажучи, приводити їх до типу базового інтерфейсу, не втрачаючи при цьому їх особливостей. І все це можна проробляти для класів, ніяк не пов’язаних в межах ієрархії.


Также рекомендую почитать


Оставить комментарий