Треки
/
Java
Java
/
Салабус
/
Інтерфейси
Ін

Інтерфейси у Java

1 вправа

Про концепцію Інтерфейси

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);
}

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

Зазвичай інтерфейси роблять одне або кілька з такого:

  • Дозволяють коду, що їх використовує, працювати з низкою різних класів узагальнено. У цьому разі інтерфейси відіграють ту саму роль, що й базовий клас. Приклад цього - java.io.InputStream,
  • Відкривають підмножину функціональності для якоїсь конкретної мети (наприклад, Comparable<T>)
  • Відкривають публічний API класу, щоб кілька реалізацій могли співіснувати. Один із прикладів - тестовий дублер
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 не підтримує множинного успадкування, але дає змогу реалізувати його подобу через інтерфейси.

До того ж механізм інтерфейсів ґрунтується на тому, що поліморфізм можна реалізувати через інтерфейси.

Редагувати через GitHub Посилання відкривається в новому вікні або вкладці

Вивчити концепцію Інтерфейси