Java Standard: Interfaces


Was ist ein Interface?

Bearbeiten

Interfaces 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

Bearbeiten

Ein 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

Bearbeiten

Normalerweise 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

Bearbeiten

Interfaces 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

Bearbeiten

Um 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 () {}
}