Java Standard: Interfaces
Was ist ein Interface?
BearbeitenInterfaces als Java-Typ beschreiben eine öffentliche Schnittstelle der implementierenden Klassen. Interfaces sind hierbei eine Möglichkeit die Probleme der Mehrfachvererbung (in Java sowieso nicht möglich) elegant zu umgehen.
Schlüsselwort für die Deklaration eines Interface ist interface
, welches anstelle der class
Deklaration tritt. Ein Interface selbst kann nicht instanziert werden.
package de.wikibooks.org.oo;
public interface MyInterface {}
Deklaratorische Interfaces
BearbeitenEin deklaratorisches Interface deklariert keine weiteren Methoden. Es stellt somit lediglich sicher, dass alle implementierenden Klassen vom Typ des Interface sind.
Ein Beispiel für ein Deklaratorisches Interface ist unser MyInterface
.
package de.wikibooks.org.oo;
public class IchBinVomTypMyInterface implements MyInterface {
public static void main (final String [] args) {
final IchBinVomTypMyInterface instance = new IchBinVomTypMyInterface ();
System.out.println ('''instance instanceof MyInterface''');
}
}
"Normale" Interfaces
BearbeitenNormalerweise deklarieren Interfaces Methoden, die durch die implementierenden Klassen definiert werden. Die deklarierten Methoden sind dabei immer von der Sichtbarkeit public
, auch wenn dies nicht explizit erwähnt wird.
package de.wikibooks.org.oo;
public interface NormalInterface {
void go ();
}
Interface als Konstantensammlung
BearbeitenInterfaces werden auch gern zur Sammlung von Konstanten verwendet. Ein schönes Beispiel hierfür ist in javax.swing.WindowConstants
zu finden. Jedoch wird davon abgeraten, Interfaces als Konstantensammlungen zu benutzen. Denn eigentlich definieren Interface neue Typen. Sun Microsystems hat dieses Problem nun adressiert und bietet mittlerweile einen eigenen Ausdruck für den Import von Konstanten aus anderen Klassen an:
import static. Siehe dazu die Schlüsselwortreferenz für import.
Interfaces benutzen
BearbeitenUm ein Interface zu benutzen, muss dieses mit implements
hinter dem Klassennamen spezifiziert werden. Anschließend müssen alle deklarierten Methoden des Interfaces implementiert (oder die Klasse als abstract
deklariert) werden.
Es können auch durchaus mehrere Interfaces implementiert werden. Diese werden dann durch Kommata getrennt: ... implements Interface1, Interface2, Interface3 {
package de.wikibooks.org.oo;
public class Walker implements NormalInterface {
public void go () {}
}