54. Interfaces
Interfaces sind rein abstrakte Klassen.
Enthält nur abstrakte Methoden und Konstanten. Interfaces bündeln einen Funktionsumfang.
Methoden und Konstanten müssen alle public sein.
Implementieren eines Interfaces in einer Klasse:
import interfaces.Verkaeuflich; public abstract class Fahrzeug implements Verkaeuflich{ }
Nun müssen alle Methoden des Interfaces in dieser Klasse definiert werden. Wenn eine Methode nicht implementiert, so muss die Klasse abermals abstract sein.
Jede Klasse kann beliebig viele Interfaces implementieren (egal wo in der Vererbungshierarchie).
Interfaces sind komplexe Datentypen. Es lassen sich daher Variablen vom Typ dieses Interfaces in Klassen definieren.
Im Gegensatz zu abstrakten Klassen lassen sich Objekte eines Interface-Typs erzeugen
Hier: Das Interface Verkaeuflich verbindet die aus unterschiedlichen Hierarchien stammenden Klasse Fahrzeug und Dackel. So lassen sich mit Hilfe eines Verkäuflich-Objektes bzw. Verkäuflich-Array Methoden gleiche Methoden auf alle dem Interface-Array angehörigen Objekte Methoden anwenden.
Implementieren mehrerer Interfaces pro Klasse mit Komma:
public abstract class Fahrzeug implements Verkaeuflich, I2, I3, I4 { }
Implementiert eine Klasse zwei Interfaces welche beide eine Methode des gleichen Namens besitzen, so ist das kein Problem, da ja keine Implementierung stattgefunden hat. Das ist also nur die zweifache Aufforderung diese Methode in der Klasse zu implementieren.
Konstanten in Interfaces können auch ohne public und final angegeben werden
static int i = 0; public static final int j = 0;
bedeutet in einem Interface das Gleiche. Genauso bei Methoden:
public abstract int getPreis(); int getLeistung();
sind identisch, da public und abstract implizit vergeben wird.
Interfaces können voneinander erben, im Sinne erweitern sie sich.
public interface Verkaeuflich extends I2{ }
Klassen die ein “Kind-Interface” implementieren, müssen zugleich auch das “Vater-Interface” implementieren.
Konstanten in Interfaces sind implizit public static final.