Wahrscheinlich ist das, was Sie tun wollen, wirklich eine Komposition oder Aggregation ( siehe hier für Entwurfsmuster ). Vielleicht definieren Sie ein Verhalten. Sie können immer eine Schnittstelle SomeInterface in der Basisklasse implementieren, haben ein Mitglied vom Typ SomeInterface (die es jede Klasse, die SomeInterface implementiert und kann daher den Code tut die Umsetzung), in der Mitglieder Konstruktor übergeben einen Verweis auf die Basisklasse, die es besitzt, wenn nötig (wenn dies zu tun, versuchen Sie, eine andere Schnittstelle hinzufügen, um die Rückrufe zu definieren, die Basisklasse wird es zu implementieren und die Unterklasse wird es als Mitglied Variable Typ). Verwenden Sie Aufrufe an die Mitgliedsklasse, um SomeInterface zu implementieren. Auf diese Weise wird der Code in einer anderen Klasse implementiert, was die Wartung vereinfacht, aber Sie führen keine Mehrfachvererbung durch.
Die Idee hinter der Komposition ist, dass ein Motor kein Auto ist, aber ein Auto hat einen Motor. Das Auto braucht einen Motor, muss aber nicht wissen, wie eine ganze Motoreinheit funktioniert, sondern nur, wie man mit ihr zusammenarbeitet. Der Motor sollte also nicht vom Auto erben. Aber dass das Auto den Motor implementiert, ist dumm. Also bekommt das Auto einen Motor als Mitglied des ganzen Autos, aber als Objekt. Das Auto hat einen Motor als Teil seiner Komposition.
Es klingt, als wäre das, was Sie tun, eher ein Verhalten, wie ein Entenobjekt, das ein Quakverhalten hat, aber Gummienten sind Enten, die nicht quaken, sondern quieken. Sie unterscheiden sich also von Stockentenobjekten, haben aber viele andere Enteneigenschaften gemeinsam. Man möchte also eine Quak-Schnittstelle haben, die jede Ente anders implementiert. Aber viele Enten werden für diese Schnittstelle quaken, also möchte man nicht für jede einzelne ein Quaken schreiben müssen. An dieser Stelle verwenden Sie die Komposition, um die Schnittstelle für das Quakverhalten zu implementieren.