interface Adressierbar {
public abstract String getWohnort();
public default String getAnschrift() {
return "Anschrift: " + getWohnort();
}
}- Statt
classwirdinterfacevorangeschrieben - Zusatandslose, abstrakte Klasse
- Keine änderbare Attribute
- Alle Attribute sind immer
public static final
- Alle Attribute sind immer
- Kein Konstruktor (kann ja nicht instantiiert werden)
- Methoden:
- Entweder
public abstractoderprivate default-Methoden bieten Standardfunktionalität (implementiert), die von einer implementierenden Klasse genutzt oder überschrieben werden kann- Statische Methoden
staticsind auch möglich, auch gleich im interface zu implementieren
- Entweder
Interfaces implemtieren
class Brief implements Adressierbar {
private String adresse;
Brief(String adresse) {
this.adresse = adresse;
}
@Override public String getWohnort() { return adresse; }
}
class Paket implements Adressierbar {
/* ... */
}Klassen können beliebig viele Interfaces implementieren, aber nur von einer Oberklasse abgeleitet sein:
interface A { } interface B { } class C { }
class D extends C implements A, B { }Interfaces als Typen nutzen
class Test {
public static void main(String[] args) {
Adressierbar[] sendungen = {
new Brief("Esplanade 10"),
new Paket("Domplatz 13")
};
for (Adressierbar s : sendungen)
System.out.println(s.getAnschrift());
}
}Interfaces im Klassendiagramm
- Box mit Namen, darüber
<<interface>> - Gestrichelter Pfeil der implementierenden Klasse zum Interface
Alternativ: Lollipop-Notation
- Kreis mit Namen des Interfaces daneben
- Verbunden zu implementierender Klasse mit einfacher Linie
Erweitern von Interfaces
Interfaces können andere Interfaces erweitern:
interface Rot
interface Tomate
interface RoteTomate extends Rot, TomateNützliche Interfaces
Das Interface Comparable
public interface Comparable<T> {
public abstract int compareTo(T o);
}compareTovergleicht this mit dem Objektound liefert eine negative ganze Zahl,Null, oder eine positive ganze Zahl, je nachdem obthiskleiner als, gleich, oder größer alsoist.- Wird bei vielen Sortieralgorithmen verwendet, möchte man also seine Klassen sortieren lassen, sollte man
compareToimplementieren.
Das Interface Comparator
public interface java.util.Comparator<T> {
public abstract int compare(T o1, T o2);
}Erst nach einem, dann nach dem anderem Kriterium vergleichen:
public default Comparator<T> thenComparing(Comparator<T> other)