Annahme:
Es gebe eine (meinetwegen abstrakte) Klasse Landfahrzeuge, aus der mehrere Klassen abgeleitet werden: Auto, Panzer, Motorad, Fahrad, usw.
Jetzt will ich das Verhalten einiger Klassen ändern und das Interface floatable implementieren, damit z.B. der Panzer auch schwimmen kann. Die Methode void swim(int destX, int destY) kann für alle Klassen gleich implementiert werden, also schreibe ich geschickterweise eine default-Methode. Soweit so gut.
Jetzt erfordert meine Implementierung aber die Speicherung der Methodenparameter, dies wiederum würde ich ja normalerweise über eine Instanzvariable machen. Und an dieser Stelle knallt das ganze Konzept, da in Interfaces ja keine Instanzvariablen liegen können.
Frage: wie kriegt man sowas dennoch elegant gelöst?
Klar, ich könnte die Methode einfach ohne Default realisieren, dann kann ich sie über schreiben und der konkreten Klasse nach Belieben Instanzvariablen einbauen. Dafür implementiere ich den Code aber zigmal auf identische Weise (und das zu Vermeiden war ja mein Ziel).
Was macht denn ein Java-Entwickler bei solchen Sachen?
Im konkreten Fall habe ich mein Konzept komplett geändert, und anstatt des Interfaces eine abstrakte Klasse gebaut. Das ging in diesem Fall ohne größere Schmerzen, aber was ist wenn das mal nicht geht? Im obigen Beispiel würde ich den Schwimmpanzer immer noch als vollwertiges Landfahrzeug ansehen, auch wenn er zufällig Schwimmen kann. Aber wie kriege ich dieses Problem dann aufgelöst?
Nachschlag: Oder hat das etwa einen tieferen Sinn, daß in Interfaces keine Instanzvariablen deklariert werden können, ähnlich wie warum Mehrfachvererbung nicht erlaubt ist?
Es gebe eine (meinetwegen abstrakte) Klasse Landfahrzeuge, aus der mehrere Klassen abgeleitet werden: Auto, Panzer, Motorad, Fahrad, usw.
Jetzt will ich das Verhalten einiger Klassen ändern und das Interface floatable implementieren, damit z.B. der Panzer auch schwimmen kann. Die Methode void swim(int destX, int destY) kann für alle Klassen gleich implementiert werden, also schreibe ich geschickterweise eine default-Methode. Soweit so gut.
Jetzt erfordert meine Implementierung aber die Speicherung der Methodenparameter, dies wiederum würde ich ja normalerweise über eine Instanzvariable machen. Und an dieser Stelle knallt das ganze Konzept, da in Interfaces ja keine Instanzvariablen liegen können.
Frage: wie kriegt man sowas dennoch elegant gelöst?
Klar, ich könnte die Methode einfach ohne Default realisieren, dann kann ich sie über schreiben und der konkreten Klasse nach Belieben Instanzvariablen einbauen. Dafür implementiere ich den Code aber zigmal auf identische Weise (und das zu Vermeiden war ja mein Ziel).
Was macht denn ein Java-Entwickler bei solchen Sachen?
Im konkreten Fall habe ich mein Konzept komplett geändert, und anstatt des Interfaces eine abstrakte Klasse gebaut. Das ging in diesem Fall ohne größere Schmerzen, aber was ist wenn das mal nicht geht? Im obigen Beispiel würde ich den Schwimmpanzer immer noch als vollwertiges Landfahrzeug ansehen, auch wenn er zufällig Schwimmen kann. Aber wie kriege ich dieses Problem dann aufgelöst?
Nachschlag: Oder hat das etwa einen tieferen Sinn, daß in Interfaces keine Instanzvariablen deklariert werden können, ähnlich wie warum Mehrfachvererbung nicht erlaubt ist?
Zuletzt bearbeitet: