Vererbung "Mehrfachvererbung" ermöglichen?

ben_

Mitglied
Hallo,

ich bin mir bewusst dann eine Mehrfachvererbung in Java nicht möglich ist, jedoch möchte ich einigen Klassen aus meiner Klassen-Hierachie mit zusätzlichen Methoden ausstatten die jedoch nicht sinnvoll von der Oberklasse vererbt werden können.

Dazu folgendes Beispiel:
Es gibt die Oberklasse "Mediafile" diese enthält Methode zum allgemeinem Umgang mit den Objekten der Klassen "Bild" und "Video". Beide Klassen sind von "Mediafile" abgeleitet und verfügen über weitere spezielle Methoden.

Jetzt sollen Objekte dieser beiden Klassen einmal per FTP und einmal per normaler Dateikopie exportiert werden können. Zukünftig wird es noch weitere Export-Möglichkeiten und weitere Objekt-Typen geben.

Wie kann ich meinen Entwurf am besten gestalten, damit er diesen Anforderungen auch zukünftig gewachsen ist?

Danke für die Hilfe!

Gruß,
Ben
 

MWin123

Bekanntes Mitglied
Statt Mehrfachverbung gibt es in Java Interfaces.
z.B. public class Bild extends Mediafile imports Exportable

Wird es denn "Mediafiles" geben, die man nicht exportieren darf?
 

InfectedBytes

Top Contributor
Anstatt den Export innerhalb der Klassen einzubauen, könntest du auch eine separate Exporter Klasse oder auch Interface erstellen. FtpExport und FileExport erben bzw. implementieren diese dann.
 

ben_

Mitglied
Soweit ich Interfaces verstehe kann ich dort nur beschreiben WAS die Klasse zu implementieren hat. Aber mir geht es um das WIE. Ich möchte gerne nur einmal die beiden Export-Funktionen implementieren und sie dann von den Klassen nutzen lassen, die die jeweilige Export-Variante verwenden soll.

Laut aktuelle Anforderung sollen alle "Mediafiles" exportierbar sein.
 

InfectedBytes

Top Contributor
Java:
public interface Exporter {
  public void export(MediaFile file, String target);
}
public class FTPexporter implements Exporter {
  public void export(MediaFile file, String target) {
    //exportiere die Datei via FTP nach target
  }
}
public class Fileexporter implements Exporter {
  public void export(MediaFile file, String target) {
    //exportiere die Datei auf festplatte
  }
}
Falls du dann irgendwann auf die Idee kommst einen weiteren Exporter hinzuzufügen, so musst den bisherigen Code im Grunde nicht ändern.
 

ben_

Mitglied
Ok, das sieht nach einer guten Lösung aus.

Für mich stellt sich jetzt noch eine Frage:
Wie müsste man diesen Entwurf erweitern, wenn es eine neue Klasse auf der gleichen Hierarchiestufe wie "Mediafiles" gibt? z.B. ZipFiles. Diese Objekte werden auch per FTP exportiert haben aber sonst keine Gemeinsamkeiten mit Objekten des Types "Mediafiles".

Hast Du da vielleicht noch eine Idee? Ich vermute das die Anforderung bald in eine solche Richtung gehen wird und versuche hier etwas vorzubauen....-)

Danke für eure Hilfe!
 

InfectedBytes

Top Contributor
Im Grunde geht es ja nur darum, die jeweiligen Files in ein byte array zu serialisieren und dieses via FTP oder sonstwie zu speichern
Daher könntest z.B. folgendes machen:
Java:
public interface Exportable {
  public byte[] serialize();
}
Deine jeweiligen ...File Klassen implementieren dann dieses interface und deine Exporter Klassen musst du dann eben derart anpassen, dass sie nun nur noch ein Exportable entgegen nehmen.
 

ben_

Mitglied
Das geht leider nicht so einfach. Die konkreten Objekte enthalten weitere Informationen wie z.B. den Ziel-Server etc. Ich möchte daher irgendeine Art von Konstrukt finden, was ich einfach in die betreffenden Objekte "reinhängen" kann.
 

Neue Themen


Oben