# Mehrfachvererbung (mehrere Klassen um ein bestimmtes Attribut erweitern)



## cocoon (17. Juli 2009)

Ich möchte mehrere Klassen um ein bestimmtes Attribut erweitern, ohne dafür jede Klasse einzeln anfassen zu müssen. Vielmehr möchte es flexibel halten, so dass auch neu hinzukommende Klassen einfach um dieses Attribut erweitert werden können.

Per Mehrfachvererbung könnte ich einfach eine Klasse mit diesem neuen Attribut von allen bisherigen Klassen ableiten. Leider geht das in Java nicht. 

Wie kann ich das alternativ realisieren? Irgendein Entwurfsmuster? Habe mir schon Wrapper, Dekorierer usw. angeschaut, aber die fassen alle die ursprünglichen Klassen mit an.

Konkret:
Ich habe eine Bibliotheks-Verwaltung, die bspw. Medien, Benutzer usw. speichert. Bisher lief diese Anwendung allein. Nun sollen per JMS entfernte Bibliotheken angebunden werden. Ich würde daher gerne jedes Entitiy (Medium, User, etc.) unkompliziert um eine Library Id erweitern.


----------



## jal1976 (20. Juli 2009)

Wenn ich dich richtig verstanden habe, Stichwort: Interface (Schnittstellen). Damit kann man das "Prinzip der Mehrfachvererbung" erreichen, denn Klassen können beliebig viele dieser Schnittstellen implementieren...

gruß
jal1976


----------



## vfl_freak (20. Juli 2009)

Moin,

genau - die Konstruktoren der Klasse müssen sich nur in der Art oder Anzahl der Attribute unterscheiden ! ! 

Gruß
Klaus


----------



## Anime-Otaku (20. Juli 2009)

jal1976 hat gesagt.:


> Wenn ich dich richtig verstanden habe, Stichwort: Interface (Schnittstellen). Damit kann man das "Prinzip der Mehrfachvererbung" erreichen, denn Klassen können beliebig viele dieser Schnittstellen implementieren...
> 
> gruß
> jal1976



Bei den Attributen stößt man da schnell auf Probleme. 
Meine (spontane) Lösung ist eine getter Methode abstract zu machen und jede Instanz davon muss halt sein eigenes Attribut halten. So ist zumindest gewährleistet das der getter implementiert werden muss.


----------



## Tommytiger (21. Juli 2009)

Anime-Otaku hat gesagt.:


> Bei den Attributen stößt man da schnell auf Probleme.
> Meine (spontane) Lösung ist eine getter Methode abstract zu machen und jede Instanz davon muss halt sein eigenes Attribut halten. So ist zumindest gewährleistet das der getter implementiert werden muss.



Konkret: In Interfaces gibt es keine deklarierten Instanzvariablen. Nur Konstanten können deklariert werden.

Die Lösung mit den getter und setter -Methoden würde ich auch vorschlagen. Einfach in ein Interface und die Klassen alle benötigten Interfaces implementieren lassen.

Deklaration der Methoden als "public abstract" in Interfaces ist redundant, da Methoden in Interfaces dies sowieso immer sind.


----------

