Home > Informatik > Begriffe und Konzepte > Interface

Interface

Definition

Interface

Unter einem Interface versteht man in Java einen klassenähnlichen Referenztyp, der in seiner ursprünglichen Form ausschließlich abstrakte Methoden-Signaturen (also ohne Implementation) definiert.

Klassen, die ein solches Interface mit dem Schlüsselwort implements einbinden, müssen alle abstrakten Methoden des Interfaces implementieren, sonst gibt es einen Compilerfehler.

Das selbe Interface kann von vielen verschiedenen Klassen eingebunden werden, eine Klasse andererseits kann mehrere Interfaces gleichzeitig einbinden.

Ab Java 8 können zusätzliche default-Methoden (mit Standard-Implementierung) und static-Methoden enthalten sein, was wir in diesem Kurs aber mal vernachlässigen.

Beispiel
Das Interface Vergleichbar

Das Interface Vergleichbar

Dieses Interface deklariert zwei boolean-Methoden zum Überprüfen von Graphik-Objekten wie Kreis, Rechteck etc., deren Position durch Instanzvariablen wie xPos und yPos festgelegt wird.

Mit der ersten Methode wird überprüft, ob zwei Graphik-Objekte die gleiche Position haben, mit der zweiten Methode soll herausgefunden werden, ob sich das Graphik-Objekt nach einer Positions-Veränderung noch innerhalb des Fensters befindet.

Die dritte Methode hat eine wichtige Test-Funktion, auf die wir gleich noch näher eingehen werden.

Die abstrakte Klasse GeoFigur

Die abstrakte Klasse Geofigur bindet das Interface ein

Die abstrakte Klasse GeoFigur bindet das Interface Vergleichbar mit dem Schlüsselwort implements ein. Das heißt, die drei im Interface deklarierten Methoden müssen in dieser Klasse implementiert werden. Die ersten beiden Methoden werden hier auch implementiert, die dritte Methode jedoch nicht. Sollte der Compiler hier nicht einen Fehler melden?

Interessanterweise übersetzt der Compiler diese abstrakte Klasse fehlerfrei. Wenn man jedoch eine konkrete Unterklasse von GeoFigur kompiliert, kommt es zu dieser Fehlermeldung.

Fehlermeldung in der Klasse Kreis

Es wird folgender Fehler gemeldet:

Kreis is not abstract and does not override abstract method testeAbhaengigkeit() in Vergleichbar.

Die abstrakte Klasse GeoFigur implementiert nur zwei der drei Methoden des Interfaces. Da GeoFigur selbst abstrakt ist, darf sie Methoden eines Interfaces offenlassen. Die Verpflichtung, eine Interface-Methode zu implementieren, kann an eine konkrete Unterklasse weitergereicht werden.

Die Klasse Kreis ist nun nicht abstrakt (sondern konkret). Die beiden ersten Methoden wurden bereits von GeoFigur implementiert, daher besteht keine Notwendigkeit, dass sie in Kreis noch einmal implementiert (überschrieben) werden. Aber die dritte, zu Testzwecken angelegte Methode, wurde in GeoFigur noch nicht implementiert. Daher muss sie nun in der Klasse Kreis "nachimplementiert" werden.

Quellen:

  1. Lahres et al.: Objektorientierte Programmierung, Rheinwerk Computing 2021.
  2. Barnes, Kölling: Java lernen mit BlueJ - Objects first. Pearson-Verlag 2019.
  3. Ullenboom: Java ist auch eine Insel, Rheinwerk Computing 2023.