Java Interface

Оновлено: 22.05.2023

Інтерфейси

Ще один спосіб досягнення абстракції в Java - це інтерфейси.

Інтерфейс - це повністю "абстрактний клас", який використовується для групування пов'язаних методів з порожніми тілами:

// interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void run(); // interface method (does not have a body)
}

Щоб отримати доступ до методів інтерфейсу, інтерфейс повинен бути "реалізований" (успадкований) іншим класом з ключовим словом implements (замість extends). Тіло методу інтерфейсу надається класом, що його реалізує:

// Interface
interface Animal {
  public void animalSound(); // interface method (does not have a body)
  public void sleep(); // interface method (does not have a body)
}

// Pig "implements" the Animal interface
class Pig implements Animal {
  public void animalSound() {
    // The body of animalSound() is provided here
    System.out.println("The pig says: wee wee");
  }
  public void sleep() {
    // The body of sleep() is provided here
    System.out.println("Zzz");
  }
}

class Main {
  public static void main(String[] args) {
    Pig myPig = new Pig();  // Create a Pig object
    myPig.animalSound();
    myPig.sleep();
  }
}
Зауваження про інтерфейси: Як і абстрактні класи, інтерфейси не можна використовувати для створення об'єктів (у наведеному вище прикладі неможливо створити об'єкт "Animal" у класі MyMainClass) Методи інтерфейсу не мають тіла - тіло надається класом-реалізатором При реалізації інтерфейсу потрібно перевизначити усі його методи Методи інтерфейсу за замовчуванням є абстрактними та загальнодоступними Атрибути інтерфейсу за замовчуванням є загальнодоступними (public), статичними (static) та кінцевими (final) Інтерфейс не може містити конструктор (оскільки з його допомогою не можна створювати об'єкти) Навіщо і коли використовувати інтерфейси? 1) Для досягнення безпеки - приховати певні деталі і показати тільки важливі деталі об'єкту (інтерфейсу). 2) Java не підтримує "множинне успадкування" (клас може успадковувати тільки від одного суперкласу). Однак це можна зробити за допомогою інтерфейсів, оскільки клас може реалізовувати декілька інтерфейсів. Примітка: Щоб реалізувати декілька інтерфейсів, розділяйте їх комою (див. приклад нижче).

Кілька інтерфейсів

Щоб реалізувати кілька інтерфейсів, розділяйте їх комою:

interface FirstInterface {
  public void myMethod(); // interface method
}

interface SecondInterface {
  public void myOtherMethod(); // interface method
}

class DemoClass implements FirstInterface, SecondInterface {
  public void myMethod() {
    System.out.println("Some text..");
  }
  public void myOtherMethod() {
    System.out.println("Some other text...");
  }
}

class Main {
  public static void main(String[] args) {
    DemoClass myObj = new DemoClass();
    myObj.myMethod();
    myObj.myOtherMethod();
  }
}