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)
defaultmetody poskytují výchozí implementaci- Rozhraní je základ polymorfismu – proměnná typu rozhraní přijme jakoukoliv implementaci