Sowohl als auch. Real existierende Objekte können in der Regel unter mehreren Aspekten betrachtet werden.
In der objektorientierten Programmierung definieren wir Objekte, die real existierende Objekte nachahmen. Das macht Programme verständlicher und verlässlicher. In der realen Welt betrachten wir Objekte oft auf verschiedene Weise. Wir können unser Auto als Fahrzeug betrachten oder als steuerpflichtiges Eigentum. Es wäre praktisch, wenn Software-Objekte ebenfalls unter mehreren Aspekten betrachtet werden könnten. Aber, ein Java-Objekt gehört genau zu einer Klasse.
Eine Schnittstelle ist eine Beschreibung von Methoden, die eine Klasse enthalten muss. Die Methoden können Teil der Klassendefinition sein oder von einer Superklasse geerbt sein. Oft sind die in einer Schnittstelle gelisteten Methoden zusätzlich zu den von einer Superklasse geerbten. Eine Schnittstelle kann Konstanten enthalten, die von der Klasse genutzt werden können.
Eine Schnittstelle lässt uns beschreiben, was verschiedene Klassen gemeinsam haben, auch wenn sie zu verschiedenen Klassenhierarchien gehören. Das hilft uns Code in einer konsistenten Weise zu organisieren.
Zum Beispiel könnte eine Klasse Auto
eine Klasse Fahrzeug
erweitern. Damit erbt sie alle Instanzmethoden und -variablen von Fahrzeug
. Wenn Auto
auch die Schnittstelle Besteuerbar
implementiert, dann beinhaltet sie ebenfalls die Methoden die in Besteuerbar
gelistet sind. Ein Fernseher
könnte auch Besteuerbar
sein, aber würde nicht Fahrzeug
erweitern.
Eine Schnittstelle ist eine Liste von Methodenheadern und Konstanten. Eine Schnittstelle hat üblicherweise keine Methodenkörper für die Methoden, die sie aufführt, sondern nur die Header. Eine Klasse, die eine Schnittstelle implementiert, muss die in einer Schnittstelle gelisteten Methoden beinhalten, entweder durch Vererbung oder durch Implementation.
In neueren Java Versionen (Version 8 und folgende) kann eine Schnittstelle auch Default Implementation von Methoden enthalten (static
und non-static
) Das ist ein sehr spezielles Merkmal, dass nur gelegentlich nützlich ist. Es wird in diesem Kapitel nicht behandelt.
Eine Klasse kann nur eine Superklasse erweitern, um die Instanzmethoden und -variablen dieser Superklasse zu erben. Eine Klasse kann ebenso eine Schnittstelle implementieren, indem sie die Methoden der Schnittstelle definiert oder erbt. Eine Klasse kann mehr als eine Schnittstelle implementieren.
Eine Schnittstelle ist eine Liste von Methoden von denen erwartet wird, dass sie Teil der Klasse sind. Solange die Klasse nicht abstrakt ist, müssen alle Methoden der Schnittstelle Teil der Klasse sein. Wenn eine Klasse nur einige der Methoden einer Schnittstelle implementiert, muss die Klasse als abstrakt deklariert sein.
Kann eine Schnittstelle Instanzvariablen enthalten?