Objekte im Konstruktor initialisieren

kixsa

Mitglied
Hallo,
ich habe ein mehr oder weniger simples Konstruktor Problem.
Ich möchte Objekte einer Klasse X im Konstruktor einer zweiten Klasse Y initialisieren. Also die Objekte
werden in Klasse X erstellt und sollen dann mit den dort angegebenen Parametern in der Klasse Y übertragen werden.

Es geht um eine Ausgabe von Lagereigenschaften von Spirituosen (Menge/Name/Einkaufspreis/Lagerzeit)
In der zweiten Klasse soll dann noch die Steuer und Handelsspanne draufgerechnet werden...

So wie ich es zur Zeit habe, wird nur item2 ausgegeben:

Klasse 1:
Java:
public class ItemTester {
	
	/**
	 * Constructor for objects of class ItemTester
	 */
	public ItemTester() {
Item item1 = new Item(1, "Jamaica Rum", 23.4, 20);
Item item2 = new Item(2, "Single Malt Whiskey", 22.1, 12);
System.out.println(item1);
System.out.println(item2);

Klasse 2:

Java:
public class Item {

	// Variablen deklarieren
	private static int itemNumber;
	private static String name;
	private static double purchasePrice;
	private static int shelfLife;
	private static double salePrice;

	// Variablen initialisieren
	public static double MARGIN_OF_PROFIT = 0.6;
	public static double VAT = 0.19;

	// Konstruktor
	public Item(int itemNumber, String name, double purchasePrice, int shelfLife) {
		
		Item.itemNumber = itemNumber;
		Item.name = name;
		Item.purchasePrice = purchasePrice;
		Item.shelfLife = shelfLife;
	}

	private static double calculateSalePrice() {
		salePrice = purchasePrice + (purchasePrice * MARGIN_OF_PROFIT)
				+ (purchasePrice * VAT);
		return salePrice;
	}

	public String toString() {
		return ("" + itemNumber + " | " + name + " | EK " + purchasePrice
				+ " Euro | VK " + salePrice + " Euro | Lagerzeit: " + shelfLife + " Monate");
	}

	public static void main(String[] args) {
		ItemTester item1 = new ItemTester();
		calculateSalePrice();
       		
	}

}

Die Ausgabe ist der Zeit:
2 | Single Malt Whiskey | EK 22.1 Euro | VK 0.0 Euro | Lagerzeit: 12 Monate
2 | Single Malt Whiskey | EK 22.1 Euro | VK 0.0 Euro | Lagerzeit: 12 Monate

Mein Fehler liegt denke ich im Konstruktor und in der Main der 2. Klasse, ich weiß aber nicht was ich ändern soll, damit item1 und item2 in der Klasse item übernommen werden.
 
Deine Item-Eigenschaften sind alle static. Das bedeutet, dass alle Instanzen sich den gleichen Speicher dafür teilen. Der 2. Aufruf des Konstruktors überschreibt also alle Daten. Die Lösung ist deshalb einfach: Mach das static bei den Instanzvariablen weg 🙂

Dafür darf die Methode calculateSalesPrice natürlich auch nicht static sein, aber das ist kein Problem, da du in main ja eine Instanz zur Verfügung hast, auf der du die Methode dann aufrufen kannst.
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben