Dnešní díl našeho seriálu o Javě se dozvíte o rozhraních – co jsou, k čemu se používají a jak je psát.

Co je to rozhraní

Rozhraní (interface) je množina metod, která může být implementována třídou. Interface pouze popisuje metody, jejich vlastní implementace však neobsahuje.

V Javě na rozdíl od jiných programovacích jazyků (například C++) nemůže třída dědit od více tříd najednou (neexistuje vícenásobná dědičnost). Každá třída však může implementovat libovolný počet rozhraní, do jisté míry tedy rozhraní vícenásobnou dědičnost nahrazují. Implementace rozhraní není na hierarchii tříd nijak vázána a nevzniká z ní vztah dědičnosti, o kterém jsme mluvili v minulém díle.

Definice rozhraní

Definice rozhraní je vidět na následujícím příkladu. Hlavička se skládá z modifikátoru viditelnosti (public), klíčového slova interface a jména rozhraní. Vlastní tělo definice pak obsahuje definici metod rozhraní.

import java.awt.*;
public interface Visualni {
  public void vykresli (Graphics kam);
}

Rozhraní může kromě definic metod obsahovat konstanty. Ty se pak chovají stejně, jako by se jednalo o konstanty třídy, která toto rozhraní implementovala.

Podobně jako lze pomocí dědičnosti rozšiřovat třídy, lze rozšiřovat i rozhraní. Pokud vytvoříte rozhraní, které dědí od jiného rozhraní, automaticky tak přebírá všechny jeho metody a konstanty. Dědičnost rozhraní se zapisuje klíčovým slovem extends. Rozhraní také mohou dědit od více rozhraní najednou.

public interface Posuvne {
  public void posun (float dx, float dy);
}
public interface Zvetsujici {
  public void zvetsi (float kolikrat);
}
public interface Pohyblive extends Zvetsujici, Posuvne { }

Implementace rozhraní

Implementovat rozhraní znamená implementovat všechny metody, které toto rozhraní definuje. Pokud třída implementuje nějaké rozhraní, je tím zaručeno, že obsahuje definici všech, které rozhraní definuje.

Implementace rozhraní se uvádí v záhlaví definice třídy klíčovým slovem implements.

import java.awt.*;
public class VisualniKruznice implements Visualni {
  public void vykresli (Graphics kam) {
    …
    }
  …
}

Třída může implementovat libovolný počet rozhraní, jak ukazuje následující příklad:

import java.awt.*;
public class VisualniPohyblivyCtverec implements Visualni, Pohyblive {
public void vykresli (Graphics kam) {
  …
  }
public void posun (float dx, float dy) {
  …
  }
public void zvetsi (float kolikrat) {
  …
  }
}

Použití rozhraní jako typů

V Javě lze definovat proměnnou typu reference na rozhraní, ve které může být uložena libovolná třída, která toto rozhraní implementuje. Jména rozhraní lze používat jako referenční datové typy stejným způsobem jako jména tříd.

Visualni visualniObjekt = new VisualniKruznice();
visualniObjekt = new VisualniCtverec();

Příklady rozhraní

Pro psaní jednoduchých aplikací nebudete zpravidla potřebovat definovat vlastní rozhraní, určitě se však neobejdete bez použití (implementace) předdefinovaných rozhraní Javy. Tady je seznam některých standardních často používaných rozhraní jazyka Java:

  • java.awt.LayoutManager – toto rozhraní definuje metody, které jsou nezbytné k tomu, aby třída mohla uspořádat grafické objekty na ploše okna. Blíže se s ním setkáme v díle, který bude věnovaný knihovně AWT.
  • java.io.DataInput, java.io.DataOutput – tato rozhraní definují metody požadované, pokud objekt chce komunikovat pomocí proudů pro předávání primitivních datových typů nebo znakových dat.
  • java.lang.Runnable – toto rozhraní definuje metodu run, jejíž kód běží jako samostatné vlákno

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět