Rozhraní (interface)

Proč to potřebuji?

Rozhraní umožňuje definovat kontrakt, který musí třídy splnit, a je základem pro polymorfismus a volné provázání komponent. Díky rozhraním lze snadno měnit implementaci bez dopadu na zbytek kódu.

Teorie

Rozhraní definuje kontrakt – sadu metod (signatury), které musí implementující třída poskytnout. Rozhraní samo neobsahuje implementaci (s výjimkou default metod od Java 8).

Signatura = jméno metody + typy parametrů + návratový typ. Třída implementuje rozhraní klíčovým slovem implements.

Rozhraní umožňuje vícenásobnou implementaci (třída může implementovat více rozhraní) a je základem polymorfismu – proměnná typu rozhraní může odkazovat na jakýkoliv objekt, který rozhraní implementuje.

Příklady

// Definice rozhraní = kontrakt
public interface Platitelny {
    double vypocitejPlat();          // signatura – abstraktní metoda
    String getJmeno();

    // Default metoda (Java 8+) – volitelná implementace
    default String getInfo() {
        return getJmeno() + ": " + vypocitejPlat() + " Kč";
    }
}

// Druhé rozhraní
public interface Tisknutelny {
    void vytiskni();
}

// Třída implementuje DVĚ rozhraní
public class Zamestnanec implements Platitelny, Tisknutelny {
    private String jmeno;
    private double zaklad;

    public Zamestnanec(String jmeno, double zaklad) {
        this.jmeno = jmeno;
        this.zaklad = zaklad;
    }

    @Override
    public double vypocitejPlat() {
        return zaklad * 1.1; // 10% bonus
    }

    @Override
    public String getJmeno() {
        return jmeno;
    }

    @Override
    public void vytiskni() {
        System.out.println(getInfo());
    }
}

// Polymorfismus přes rozhraní
Platitelny p = new Zamestnanec("Karel", 30000);
System.out.println(p.vypocitejPlat()); // 33000.0
// p.vytiskni(); // CHYBA – Platitelny nemá metodu vytiskni()

Shrnutí

Klíčové body

  • Interface = kontrakt, definuje CO, ne JAK
  • Třída může implementovat více rozhraní (řeší problém vícenásobné dědičnosti)
  • default metody poskytují výchozí implementaci
  • Rozhraní je základ polymorfismu – proměnná typu rozhraní přijme jakoukoliv implementaci