Interfejs Java


Interfejsy

Innym sposobem na osiągnięcie abstrakcji w Javie są interfejsy.

An interfacejest całkowicie „ klasą abstrakcyjną ”, która służy do grupowania powiązanych metod z pustymi ciałami:

Przykład

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

Aby uzyskać dostęp do metod interfejsu, interfejs musi być „zaimplementowany” (coś w rodzaju dziedziczenia) przez inną klasę ze implements słowem kluczowym (zamiast extends). Treść metody interfejsu jest dostarczana przez klasę „implement”:

Przykład

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

Uwagi dotyczące interfejsów:

  • Podobnie jak klasy abstrakcyjne , interfejsy nie mogą być używane do tworzenia obiektów (w powyższym przykładzie nie jest możliwe utworzenie obiektu „Animal” w MyMainClass)
  • Metody interfejsu nie mają treści - treść jest dostarczana przez klasę „implement”
  • Podczas implementacji interfejsu musisz nadpisać wszystkie jego metody
  • Metody interfejsu są domyślnie abstracti public
  • Atrybuty interfejsu to domyślnie public, staticafinal
  • Interfejs nie może zawierać konstruktora (ponieważ nie można go używać do tworzenia obiektów)

Dlaczego i kiedy używać interfejsów?

1) Aby osiągnąć bezpieczeństwo - ukryj pewne szczegóły i pokaż tylko ważne szczegóły obiektu (interfejsu).

2) Java nie obsługuje „wielokrotnego dziedziczenia” (klasa może dziedziczyć tylko z jednej nadklasy). Można to jednak osiągnąć za pomocą interfejsów, ponieważ klasa może implementować wiele interfejsów. Uwaga: Aby zaimplementować wiele interfejsów, oddziel je przecinkami (patrz przykład poniżej).


Wiele interfejsów

Aby zaimplementować wiele interfejsów, oddziel je przecinkami:

Przykład

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