„Hallo Amigo! Jetzt kommen wir endlich zu etwas wirklich Interessantem. Heute erzähle ich dir von der Mehrfachvererbung. Die Mehrfachvererbung ist in der Tat ein sehr faszinierendes und mächtiges Werkzeug. Und wenn es nicht verschiedene Probleme gäbe, dann würde Java die Mehrfachvererbung von Klassen unterstützen. Aber das tut es nicht, also müssen wir uns mit der Mehrfachvererbung von Interfaces zufrieden geben. Was auch ziemlich cool ist.“

Mehrere Interfaces vererben - 1

Stell dir vor, du schreibst ein Computerspiel. Und seine Charaktere (deine Objekte) müssen sich auf sehr komplexe Weise verhalten: über eine Karte laufen, Gegenstände sammeln, Quests abschließen, mit anderen Charakteren kommunizieren, jemanden töten, jemanden retten. Nehmen wir an, du konntest alle Objekte in 20 Kategorien einteilen. Das bedeutet, dass du, wenn du Glück hast, mit nur 20 Klassen auskommst, um deine Objekte zu definieren. Aber hier ist der Haken: Wie viele einzigartige Formen der Interaktion werden diese Objekte wohl haben? Jeder Objekttyp kann einzigartige Interaktionen mit 20 anderen Objekttypen haben (wir zählen auch Interaktionen mit Objekten desselben Typs dazu). Mit anderen Worten: Du musst Code für 20 x 20 = 400 Interaktionen schreiben! Und wenn die Anzahl der einzigartigen Objekttypen nicht 20, sondern 100 ist, dann könnte die Anzahl der Interaktionen sogar 10.000 betragen!

„Oh! Jetzt verstehe ich, warum Programmieren so schwierig ist.“

„Es ist einfach. Dank vieler Abstraktionen. Und das nicht zuletzt dank der Mehrfachvererbung von Interfaces.“

Wir können die Objektinteraktion oft vereinfachen, wenn Rollen und/oder Fähigkeiten statt der Objekte selbst interagieren. Und wie wir bereits wissen, können Fähigkeiten ganz leicht zu einer Klasse hinzugefügt werden, wenn sie ein Interface implementiert.

Wenn ein großes Programm geschrieben wird, tun Entwickler dies normalerweise von Anfang an:

1) Alle Fähigkeiten/Rollen identifizieren.

2) Interaktion zwischen diesen Rollen definieren.

3) Allen Klassen Rollen zuweisen.

„Hast du vielleicht ein Beispiel?“

„Natürlich. Sehen wir uns die Rollen in der Zeichentrickserie „Tom und Jerry“ an.“

Java-Code Beschreibung
interface Moveable
{}
– Rolle/Fähigkeit, sich zu bewegen.
interface Eatable
{}
– Rolle/Fähigkeit, gefressen zu werden.
interface Eat
{}
– Rolle/Fähigkeit, jemanden zu fressen.
class Tom extends Cat implements Moveable, Eatable, Eat
{}
Tom ist eine Katze, die drei Rollen hat:
1) Er kann sich bewegen
2) Er kann jemanden fressen
3) Er kann von jemandem (einem Hund) gefressen werden
class Jerry extends Mouse implements Moveable, Eatable
{}
Jerry ist eine Maus, die zwei Rollen hat:
1) Er kann sich bewegen
2) Er kann von jemandem gefressen werden
class Killer extends Dog implements Moveable, Eat
{}
Killer ist ein Hund mit zwei Rollen: 1) Er kann sich bewegen 2) Er kann jemanden fressen

Wenn du nur diese drei Rollen (Interfaces) kennst, kannst du ein Programm schreiben und die korrekte Interaktion dieser Rollen beschreiben. Zum Beispiel wird ein Objekt (über das Movable- Interface) einem „fressbaren Objekt“ hinterherjagen und vor einem „gefräßigen Objekt“ weglaufen. Und das alles, ohne von bestimmten Objekten zu wissen. Wenn du dem Programm weitere Objekte (Klassen) hinzufügst und diese Rollen behältst, wird es trotzdem wunderbar funktionieren und das Verhalten deiner Objekte steuern.