Literatur

Interfaces (Schnittstellen)

In Java existieren neben Klassen auch Interfaces. Diese werden anstatt dem Schlüsselwort class mit dem Schlüsselwort interface eingeleitet. Interfaces sollten ebenso wie Klassen auch jeweils in einer separate Java-Datei gespeichert werden. Vom Aufbau her sind Interfaces einer Klasse sehr ähnlich, sie sind nahezu vergleichbar abstrakten Klassen, welche nur Methodendeklarationen enthalten. Der einzige Unterschied zu einer Klasse besteht darin, dass ein Interface keine Implementierungen besitzt, sondern nur Methodenköpfe und Konstanten.

Schauen wir uns einmal den Aufbau eines Interfaces an.

Modifikator interface MyInterface
{
    final Modifikator Datentyp variable = Wert;
    Modifikator Datentyp methode();
}

Der Kopf eines Interfaces ist aufgebaut wie der einer Klasse, nur dass das Schlüsselwort class durch interface ersetzt wird. In dem Rumpf des Interfaces können sich nur Konstanten und Methodennamen befinden.

Interfaces werden unter anderem dazu verwendet, um die Spezifikation von Klassen von deren Implementierung zu trennen. Man kann aber auch durch Interfaces die eigentliche Implementierung vor Dritten schützen. Daher kann man auch Interfaces und deren enthaltene Methoden als Kommunikationsschnittstelle benutzen, da durch den Methodenkopf die zu erwartenden Übergabeparameter und der Rückgabewert festgelegt sind.

Ein Interface kann auch, wie Klassen, eine Vererbungshierarchie besitzen. Dort gelten aber die selben Regeln wie bei Klassen (Einfachvererbung, Sichtbarkeit etc.).

Da wir aber auch Interfaces verwenden wollen, müssen wir Sie irgendwie in eine Klasse einbinden. Dies geschieht über das Schlüsselwort implements. Das nachfolgende Beispiel zeigt, wie das obige Interface MyInterface in eine Klasse eingebunden wird.

Modifikator class Klasse extends Superklasse implements MyInterface
{
    // Anweisungen
} 

Wir können den normalen Aufbau einer Klasse einfach mit dem neuen Interface erweitern, indem wir vor dem Klassenrumpf mit dem Schlüsselwort implements unser Interface MyInterface einbinden. Das Einbinden eines Interfaces kann parallel zur Vererbung stattfinden. Man kann beliebig viele Interfaces in eine Klasse einbinden, die Interfacenamen werden dann im Klassenkopf einfach durch ein Komma getrennt. Dies macht man sich häufig zunutze, um in Java eine Art Mehrfachvererbung zu simulieren, da dies ansonsten nicht direkt möglich ist.

Schauen wir uns direkt ein konkretes Beispiel an.

Beispiel:

interface PunktSchnittstelle
{
    /* Methoden, die von einem Punkt implementiert werden sollen */
    public int getX();
    public void setX(int i);
}
 
/* Unsere Klasse Punkt, die das Interface PunktSchnittstelle einbindet */
public class Punkt implements PunktSchnittstelle
{
    private int x;
     /* Implementierung der Methode getX aus dem Interface PunktSchnittstelle */
    public int getX()
    {
        return x;
    }
    /* Implementierung der Methode setX aus dem Interface PunktSchnittstelle */
    public void setX(int i)
    {
        x = i;
    }
}

In dem obigen Beispiel haben wir ein Interface mit dem Namen PunktSchnittstelle, welche in die Klasse Punkt eingebunden wird, erstellt. Die Klasse Punkt muss anschließend die Methodendeklarationen aus dem Interface implementieren.