Rozhraní Java
Rozhraní
Dalším způsobem, jak dosáhnout abstrakce v Javě, jsou rozhraní.
An interface
je 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í
abstract
apublic
- Atributy rozhraní jsou ve výchozím
public
nastavenístatic
afinal
- 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();
}
}