interfaces — це основний засіб відокремлення використання класу від його реалізації.
Це відокремлення дає гнучкість для супроводу реалізації та допомагає підтримувати типобезпечну узагальнену поведінку.
Синтаксис інтерфейсу подібний до синтаксису класу, але методи в ньому подано лише як сигнатуру, без тіла.
public interface Language {
String speak();
}
public interface ItalianLanguage extends Language {
String speak();
String speakItalian();
}
public interface ScriptConverter {
void setVersion(String version);
String getVersion();
String convertCyrillicToLatin(String cyrillic);
}
Клас, який реалізує інтерфейс, повинен реалізувати всі операції, визначені цим інтерфейсом.
Зазвичай інтерфейси роблять одне або кілька з такого:
Comparable<T>)public class ItalianTraveller implements ItalianLanguage {
public String speak() {
return "Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class ItalianTravellerV2 implements ItalianLanguage {
public String speak() {
return "migliorata - Ciao mondo";
}
public String speakItalian() {
return speak();
}
}
public class FrenchTraveller implements Language {
public String speak() {
return "Ça va?";
}
}
public class RussianTraveller implements Language, ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String speak()
{
return "Привет мир";
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
public class DocumentTranslator implements ScriptConverter {
private String version;
public void setVersion(String version) {
this.version = version;
}
public String getVersion() {
return version;
}
public String translate(String russian) {
throw new UnsupportedOperationException();
}
public String convertCyrillicToLatin(String cyrillic) {
throw new UnsupportedOperationException();
}
}
Код, який використовує наведені вище інтерфейси та класи, може:
Інтерфейси широко використовують для підтримки тестування, бо вони уможливлюють просте макетування.
Інтерфейси можуть розширювати інші інтерфейси за допомогою ключового слова extend.
Члени інтерфейсу типово публічні.
Інтерфейси можуть містити вкладені типи: interfaces, enums і classes.
Тут інтерфейси, що їх містять, відіграють роль просторів імен.
До вкладених типів звертаються ззовні інтерфейсу, додаючи попереду назву інтерфейсу й використовуючи точковий синтаксис, щоб указати на член.
За задумом Java не підтримує множинного успадкування, але дає змогу реалізувати його подобу через інтерфейси.
До того ж механізм інтерфейсів ґрунтується на тому, що поліморфізм можна реалізувати через інтерфейси.