Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Wie kann ich einen Objekt zu Instanzvariable speichern ?
Hallo, ich habe so eine Frage :
Legen Sie hierfür eine FondInvestment-Klasse an, die von der Investment-Klasse erbt. Um die Daten des Investments verwalten zu können, sollten Sie eine Instanzvariable stockArray vom Typ Stock[] anlegen sowie eine unveränderliche Instanzvariable price vom Typ double. Das stockArray soll nach der Erstellung des FondInvestment nicht mehr veränderbar sein. Legen Sie einen Konstruktor an, der den Preis und eine beliebige Anzahl von Stock-Objekten als Parameter erhält und diese in die jeweilige Instanzvariable speichert.
Ich habe keine Idee, wie man Objekt zu Instanzvariable. In diesem Fall habe ich mein ganze Code hochgeladen. Da steht im klass FondInvestment. Kann jemand mir helfen vielleicht ?.
Also Grundlegend gibt es Klassen und Instanzvariablen. Klassenvariablen sind mit static definiert und können als shared Variable über alle Instanzen einer Klasse (oder darüber hinaus gesehen werden).
Hingegen Instanzvariablen sind nur einer Instanz zugeordnet und diese werden auch nicht mit anderen Instanzen geteilt.
Also wird deine Klasse irgendwie so aussehen (ohne mir deinen Code angsehen zu haben):
Java:
public class FondInvestment extends Investment {
private final Stock[] stockArray;
private final double price;
public FondInvestment(double price, Stock... stocks) {
this.price = price;
this.stockArray = Arrays.copyOf(stocks);
}
// Logik
}
Der Code ist jetzt so heruntergeschrieben und nicht getestet!
Danke für die Antwort Flown . Aber es kommt den gleichen Fehler bei Konstruktor :"Implicit super constructor Investment() is undefined. Must explicitly invoke another constructor". Ich denke, dass das von Invenstment's Klasse konstruktor kommt. Da muss ich anpassen.
Der Konstruktor in FondInvestment versucht implizit super() aufzurufen. So einen Kontruktor gibt es in der Oberklasse aber nicht. Du kannst das Verhalten durch selbstaufrufen der super-Methode mit Übergabe von Parametern ändern oder einen Defaultkonstuktor in Investment einführen.
Die beiden Parameter stock und amount werden moment auch nicht in der Super-Klasse benutzt. Deshalb ist es schwer dir eine sinnvolle Implementierung vorzuschlagen. Ich denke anhand der Aufgabenstellung sollst du später noch etwas mit diesen beiden Parametern machen.
Als Kompromiss würde ich erst einmal einen Default-Konstruktor einführen, der dem Investment eine id gibt.
Java:
public Investment() {
this.id = nextId++;
}
Aber hier musst du später noch einmal schauen, je nachdem in Welche Richtung die Aufgabe geht kann das jetzt auch der falsche Ansatz sein.
Allgemein finde ich es aber auch seltsam, dass stock in der Unterklasse collectionwertig ist, aber in der Oberklasse nicht.
Ich verstehe die Lösung trotzdem nicht .... Wenn doch deine Superklasse Investment schon Stock[] und price kennt/hat, wieso brauchst du das in deiner Klasse FondInvestment nochmal ? Irgendwas stimmt da am Design nicht.
Also JStein52, das ist wegen der Aufgabe. Da steht so :
FondInvestment: Legen Sie hierfür eine FondInvestment-Klasse an, die von der Investment-Klasse erbt. Um die Daten des Investments verwalten zu können, sollten Sie eine Instanzvariable stockArray vom Typ Stock[] anlegen sowie eine unveränderliche Instanzvariable price vom Typ double. Das stockArray soll nach der Erstellung des FondInvestment nicht mehr veränderbar sein. Legen Sie einen Konstruktor an, der den Preis und eine beliebige Anzahl von Stock-Objekten als Parameter erhält und diese in die jeweilige Instanzvariable speichert. Überschreiben Sie nun die absolutPriceDelta() und currentValue()-Methoden. Die currentValue()-Methode soll dabei über das stockArray iterieren und die Summe der Werte berechnen und zurückgeben. Die absolutPriceDelta()-Methode soll die Differenz zwischen der price-Variable und dem in currentValue() berechneten Preis zurückgeben. Legen Sie Getter und eine toString()-Methode an. Erweitern Sie nun die Klassen InvestmentManager und Starter so, dass die neue Investmentart gekauft werden kann. Erweitern Sie die buyFond()-Methode in der Starterklasse, die es ermöglichen soll, neue Fondinvestments zu kaufen. Sie können sich dabei an der Beispielausgabe orientieren. Sie können hierfür den InvestmentManager erweitern oder verändern.