Rozhraní Java


Rozhraní

Dalším způsobem, jak dosáhnout abstrakce v Javě, jsou rozhraní.

An interfaceje zcela „ abstraktní třída “, která se používá k seskupení souvisejících metod s prázdnými těly:

Příklad

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

Pro přístup k metodám rozhraní musí být rozhraní „implementováno“ (něco jako zděděno) jinou třídou s implements klíčovým slovem (místo extends). Tělo metody rozhraní poskytuje třída "implement":

Příklad

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

Poznámky k rozhraním:

  • Stejně jako abstraktní třídy nelze rozhraní použít k vytváření objektů (ve výše uvedeném příkladu není možné vytvořit objekt „Animal“ v MyMainClass)
  • Metody rozhraní nemají tělo - tělo poskytuje třída "implement".
  • Při implementaci rozhraní musíte přepsat všechny jeho metody
  • Metody rozhraní jsou ve výchozím nastavení abstracta public
  • Atributy rozhraní jsou ve výchozím publicnastavení staticafinal
  • Rozhraní nemůže obsahovat konstruktor (protože jej nelze použít k vytváření objektů)

Proč a kdy používat rozhraní?

1) Pro dosažení bezpečnosti - skryjte určité detaily a zobrazte pouze důležité detaily objektu (rozhraní).

2) Java nepodporuje "vícenásobnou dědičnost" (třída může dědit pouze z jedné nadtřídy). Lze toho však dosáhnout pomocí rozhraní, protože třída může implementovat více rozhraní. Poznámka: Chcete-li implementovat více rozhraní, oddělte je čárkou (viz příklad níže).


Více rozhraní

Chcete-li implementovat více rozhraní, oddělte je čárkou:

Příklad

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