Інтерфейс (Java)Інтерфейс у мові програмування Java — це абстрактний тип, який використовується для визначення поведінки, яку класи повинні реалізовувати. Інтерфейси схожі до протоколів. Інтерфейси оголошуються за допомогою ключового слова Інтерфейс не може бути інстанційованим, а тільки реалізованим (тобто не можна створити об'єкт інтерфейсу з використанням оператора new). Клас, що реалізує інтерфейс, повинен визначити усі методи, описані в цьому інтерфейсі, або має бути абстрактним класом. Посилання на об'єкти в Java можуть бути позначені типом інтерфейсу; тоді у кожному такому випадку посилання може бути або null, або вказувати на об'єкт, що реалізує інтерфейс. Однією з переваг використання інтерфейсів є те, що вони імітують множинне успадкування. Усі класи Java повинні мати тільки один базовий клас, єдиним винятком з цього правила є ОглядІнтерфейси використовуються для описання подібності, яку поділяють різні класи, але які не обов'язково мають класові взаємозв'язки. Наприклад, людина і папуга обидва можуть свистіти; однак, не має сенсу представляти Інше використання інтерфейсів — можливість використовувати об'єкт, фактично без наявності інформації про його тип, але про який відомо, що він реалізує певний інтерфейс. Виклик Наприклад: interface Bounceable {
double pi=3.1415;
void setBounce(); // Методи інтерфейсів публічні, абстрактні і ніколи не бувають незмінними (final).
// Думайте про них тільки як про прототипи; їх реалізація не дозволена.
}
Інтерфейс:
ВикористанняВизначення інтерфейсуІнтерфейси визначаються наступним синтаксисом (порівняйте з визначенням класу Java): [видимість] interface InterfaceName [успадкування інших інтерфейсів] {
константні оголошення
абстрактні оголошення методів
}
Тіло інтерфейсу містить абстрактні методи, та оскільки всі методи в інтерфейсі є, за визначенням, абстрактними, ключове слово public interface Predator {
boolean chasePrey(Prey p);
void eatPrey(Prey p);
}
Оголошення внутрішнього класу всередині тіла інтерфейсу неявно є Реалізація інтерфейсів в класіСинтаксис реалізації інтерфейсу використовує наступне визначення: ... implements InterfaceName[, інший інтерфейс, ще один, ...] ... Наприклад, public class Lion implements Predator {
@Override
public boolean chasePrey(Prey p) {
// програма переслідування здобичі (спеціалізація левів).
}
@Override
public void eatPrey(Prey p) {
// програма поїдання здобичі (спеціалізація левів)
}
}
Якщо клас реалізує інтерфейс, але не реалізує всі його методи, він повинен бути позначений як public class Frog implements Predator, Prey { ... }
Інтерфейси можуть мати спільні методи класу: class Animal implements LikesFood, LikesWater {
boolean likes() {return true;}
}
Однак даний клас не може реалізовувати той самий або аналогічний інтерфейс декілька разів: class Animal implements Shares<Boolean>, Shares<Integer> ...
// помилка: повторення інтерфейсу
Інтерфейси зазвичай використовуються в мові Java для функцій зворотного виклику (callback),[3] оскільки Java не дозволяє багаторазове успадкування класів, і не дозволяє передавати методи (процедури) як аргументи функцій. Тому для того, щоб передати деяку дію як параметр цільовому методу, поточний підхід полягає у створенні класу, що реалізує потрібний інтерфейс, та передачі посилання на нього у цільовий метод. Цей підхід базується на так званій таблиці віртуальних методів, що супроводжує кожен об'єкт, та яка допомагає викликати метод потрібного інтерфейсу об'єкта без фактичного знання його типу. НадінтерфейсиІнтерфейси можуть розширювати декілька інших інтерфейсів, використовуючи наступний синтаксис: public interface VenomousPredator extends Predator, Venomous {
//interface body
}
що є дозволеним і визначає надінтерфейс. Зверніть увагу на те, що багаторазове успадкування дозволене, на відміну від класів. Також зауважте, що ПрикладиДеякі інтерфейси стандартної бібліотеки Java:
Див. такожПримітки
Посилання
|
Portal di Ensiklopedia Dunia