Interfaces

**This is an old revision of the document!**

Interfaces

  • Java Interfaces sind ein Schlüsselelement der objektorientierten Programmierung, um Abstraktion zu ermöglichen.
  • Im Gegensatz zu Superklassen enthalten sie nie konkrete Implementierungen, sondern definieren nur das zu implementierende Verhalten. Definieren heißt hier, dass nur eine Methode erwähnt wird, die dann von der konkreten Klasse in jedem Fall implementiert werden muss.
  • Ein großer Vorteil von Interfaces ist die Möglichkeit der Mehrfachvererbung, was Flexibilität in der Gestaltung des Programms ermöglicht. Sie werden verwendet, wenn verschiedene, nicht verwandte Klassen das gleiche Verhalten teilen sollen, ohne eine starre Vererbungshierarchie aufzubauen.
  • Genau wie eine abstrakte Superklasse wird ein Interface nicht instanziiert, d.h. es wird kein Objekt direkt aus einem Interface mithilfe des new gebildet. Es gibt aber auch Unterschiede.

Unterschied zu Superklassen

Mehrfachvererbung

Im Gegensatz zu Klassen können Interfaces mehrfach implementiert werden, wodurch eine Flexibilität entsteht, die Superklassen nicht bieten.

Superklassen sind ideal, wenn es um Code-Wiederverwendung geht, während Interfaces zur Definition von Verhalten verwendet werden.

Methoden

  • Interfaces enthalten ganz sicher nur Methodensignaturen.
  • Sie werden nicht im Interface, sondern in der Klasse ausbuchstabiert, die das Interface implementiert.
  • Eine Superklasse enthält möglicherweise Implementierungen von Methoden.

Attribute

Ein Interface bringt nur Attribute mit folgenden Eigenschaften mit:

  • static, d.h. das Attribut ist eine sog. Klassenvariable und gilt über alle Instanzen der Klasse hinweg
  • final, d.h. das Attribut ist nicht veränderbar - sprich: es ist eine KONSTANTE.

Die sonst üblichen Attribute müssen in der jeweiligen Klasse implementiert werden.

Verwendung

Interfaces verwenden das Schlüsselwort interface.

Eine Klasse, die das Interface implementiert, verwendet das Schlüsselwort implements.

// Definition des Interface
public interface Saeugetier{
 
    public boolean hatLunge = true; // Nur Deklarierung von Konstanten (public, static, final)
 
    // Methoden ohne Implementierung
    void sound(); // kein Methodenkoerper
    void sleep(); // auch kein Methodenkoerper
}
Eine Klasse, die ein Interface implementiert verwendet - wer hätte es gedacht - das Schlüsselwort implements.

// Klasse Dog implementiert das Interface Saeugetier
class Dog implements Saeugetier{
    // Implementierung der Methoden des Interface
    public void sound() {
        System.out.println("Der Hund bellt");
    }
    public void sleep() {
        System.out.println("Der Hund schläft");
    }
}
Und noch eine Klasse, die das Interface mithilfe des Schlüsselworts implements implementiert.

// Klasse Cat implementiert ebenfalls das Interface Saeugetier
class Cat implements Saeugetier{
    // Implementierung der Methoden des Interface
    public void sound() {
        System.out.println("Die Katze miaut");
    }
    public void sleep() {
        System.out.println("Die Katze schläft");
    }
}

UML

interfaceuml.svg{.align-center}