Hi-Ho,
mal ne allgemeine Design-Frage: Ich habe eine Klasse A von dieser Klasse erben mehrere Klassen (Achildren). Dann habe ich eine weitere Klasse B, von welcher auch mehrere Klassen erben (Bchildren).
Der Aufbau von B und Bchildren ist ähnlich.
Gesucht ist das Design für Klasse Z. Klasse Z kennt nur die Superklassen A und B und soll alle Subklassen dieser Superklassen einmal aufnehmen (praktisch eine Art Auflistung), und in Form von ihrer Superklasse wieder zurückgeben können. Außerdem müssen über die toString()-Methode in der Klasse Z die Name aller Achildren und Bchildren (die ja dann nur noch in Form ihrer Superklasse vorliegen) zurückgegeben werden.
Normalerweise würde Klasse Z dann in etwa so aussehen:
Die Klasse, die alle Achildrens, Bchildrens und Z instanziiert und beinhaltet nennen wir M. Mein Problem liegt jetzt darin, dass Z eigentlich keine Objekte von A und B benötigt, sondern lediglich deren Namen über toString und ein eindeutiges Identifikationsmerkmal, über welches ich später in M (M fragt zu einem späteren Zeitpunkt über getA oder getB Werte von Z ab) neue Instanzen der Achildrens und Bchildrens erstellen kann => Jede Subklasse von A und B darf und muss ja nur genau einmal in Z vorkommen, und ein Objekt dieser Subklassen in Z wird nicht benötigt, da später in M ohnehin anhand des Rückgabetyps von Z ein neuer Typ von Achildren bzw. Bchildren erstellt wird. Deshalb erscheint mir diese Implementierung etwas unsauber.
Falls meine Ausführungen jetzt jemand verstanden, und einen Lösungsansatz für mich hat, wäre ich sehr dankbar.
mal ne allgemeine Design-Frage: Ich habe eine Klasse A von dieser Klasse erben mehrere Klassen (Achildren). Dann habe ich eine weitere Klasse B, von welcher auch mehrere Klassen erben (Bchildren).
Code:
public class A {
private String name = null;
private double wert = 0.0;
protected A() {};
protected A(String name, double wert) {
this.name = name;
this.wert = wert;
}
public double getWert() {
return this.wert;
}
public String toString() {
return this.name;
}
}
Code:
public class Achildren extends A {
public Achildren() {
super("Achildren", 3.30);
}
}
Der Aufbau von B und Bchildren ist ähnlich.
Gesucht ist das Design für Klasse Z. Klasse Z kennt nur die Superklassen A und B und soll alle Subklassen dieser Superklassen einmal aufnehmen (praktisch eine Art Auflistung), und in Form von ihrer Superklasse wieder zurückgeben können. Außerdem müssen über die toString()-Methode in der Klasse Z die Name aller Achildren und Bchildren (die ja dann nur noch in Form ihrer Superklasse vorliegen) zurückgegeben werden.
Normalerweise würde Klasse Z dann in etwa so aussehen:
Code:
public class Z {
A[] as = null;
B[] bs = null;
public Z() {
as = new A[10];
bs = new B[10];
}
public void addA(A a) {
// a hinzufügen
}
public A getA(int pos) {
// a zurückgeben
}
public void addB(B b) {
// b hinzufügen
}
public B getB(int pos) {
// b zurückgeben
}
public String toString() {
String str = "";
for (int i = 0; i < as.length; i++) {
str += as[i].toString();
}
// selbes für bs
}
}
Die Klasse, die alle Achildrens, Bchildrens und Z instanziiert und beinhaltet nennen wir M. Mein Problem liegt jetzt darin, dass Z eigentlich keine Objekte von A und B benötigt, sondern lediglich deren Namen über toString und ein eindeutiges Identifikationsmerkmal, über welches ich später in M (M fragt zu einem späteren Zeitpunkt über getA oder getB Werte von Z ab) neue Instanzen der Achildrens und Bchildrens erstellen kann => Jede Subklasse von A und B darf und muss ja nur genau einmal in Z vorkommen, und ein Objekt dieser Subklassen in Z wird nicht benötigt, da später in M ohnehin anhand des Rückgabetyps von Z ein neuer Typ von Achildren bzw. Bchildren erstellt wird. Deshalb erscheint mir diese Implementierung etwas unsauber.
Falls meine Ausführungen jetzt jemand verstanden, und einen Lösungsansatz für mich hat, wäre ich sehr dankbar.