# Vererbung



## AndreasS (11. Jun 2004)

Hallo,

habe mal wieder ein Problem, an dem ich nicht weiterkomme. Bin halt noch Anfänger in Sachen Java...  

Die Klasse "Kasse" funktioniert nicht richtig. Habe mal meinen Code gelöscht, um niemand zu verwirren.
Diese Klasse und die Methode bezahlen() sind für die Ausgabe mit verantwortlich.
Leider weiß ich nicht, wie das funktionieren soll...
Hier mal der Code:


```
import java.util.*;

public class Supermarkt {

  public static void main(String[] args) {
    Lager aldiLager=new Lager();                            //Anlegen des Lagers

    /* Füllen des Lagers */
    Buch harrypotter1=new Buch("Harry Potter 1",15);
    aldiLager.wareneingang(harrypotter1);

    Buch harrypotter2=new Buch("Harry Potter 2",17);
    aldiLager.wareneingang(harrypotter2);

    Buch harrypotter3=new Buch("Harry Potter 3",19);
    aldiLager.wareneingang(harrypotter3);

    Buch harrypotter4=new Buch("Harry Potter 4",22);
    aldiLager.wareneingang(harrypotter4);

    Buch harrypotter5=new Buch("Harry Potter 5",26);
    aldiLager.wareneingang(harrypotter5);

    Elektronikartikel stereoanlage=new Elektronikartikel("Stereoanlage",199,24);
    aldiLager.wareneingang(stereoanlage);

    Elektronikartikel rasierer=new Elektronikartikel("Rasierer",29.90,36);
    aldiLager.wareneingang(stereoanlage);

    Lebensmittel gurke=new Lebensmittel("Gurke",0.69,"20031201");
    aldiLager.wareneingang(gurke);

    Lebensmittel spaetzle=new Lebensmittel("Schwäbische Spätzle",5.99,"20040101");
    aldiLager.wareneingang(gurke);

    Lebensmittel schinkenwurst=new Lebensmittel("Schinkenwurst",2.99,"20041208");
    aldiLager.wareneingang(schinkenwurst);
    /*********************/

    /* Einkauf 1 */
    Warenkorb meinEinkauf=new Warenkorb();
    meinEinkauf.hineinlegen(schinkenwurst);
    meinEinkauf.hineinlegen(harrypotter1);
    meinEinkauf.hineinlegen(spaetzle);
    meinEinkauf.hineinlegen(rasierer);
    Kasse.bezahlen(meinEinkauf);
    System.out.println("Ende Einkauf 1\n");
    /*************/


    /* Einkauf 2 */
    Warenkorb einAndererEinkauf=new Warenkorb();
    einAndererEinkauf.hineinlegen(harrypotter1);
    einAndererEinkauf.hineinlegen(harrypotter2);
    einAndererEinkauf.hineinlegen(harrypotter3);
    einAndererEinkauf.hineinlegen(harrypotter4);
    einAndererEinkauf.hineinlegen(harrypotter5);
    Kasse.bezahlen(einAndererEinkauf);
    System.out.println("Ende Einkauf 2\n");
    /*************/


    /* Einkauf 3 */
    Warenkorb nochEinEinkauf=new Warenkorb();
    nochEinEinkauf.hineinlegen(stereoanlage);
    nochEinEinkauf.hineinlegen(gurke);
    Kasse.bezahlen(nochEinEinkauf);
    System.out.println("Ende Einkauf 3\n");
    /*************/
  }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++ HIER IST DAS PROBLEM: +++++++++++++++++++++++++++++++++++++++
//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
class Kasse{
}

class Produkt {
	//Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
}

class Lebensmittel extends Produkt{
  private String haltbarkeitsdatum;

  public Lebensmittel(String name,double preis,String haltbarkeitsdatum){
    super(name,preis,0.16);

    this.haltbarkeitsdatum=haltbarkeitsdatum;
  }
}

class Elektronikartikel extends Produkt{
  private int garantie;

  public Elektronikartikel(String name,double preis,int garantie){
    super(name,preis,0.16);

    this.garantie=garantie;
  }

  public int getGarantie(){ return(garantie); }
}

class Buch extends Produkt{
  public Buch(String name,double preis){
    super(name,preis,0.07);
  }
}

class Warenkorb {
  private Vector warenkorb=new Vector();

  public void hineinlegen(Produkt prod){ warenkorb.addElement(prod); }
  public void herausholen(Produkt prod){ warenkorb.remove(prod); }
  public int anzahlProdukte(){ return(warenkorb.size()); }
  public Produkt produkt(int i){ return((Produkt)warenkorb.elementAt(i)); }
}

class Lager {
  private Vector lager=new Vector();

  public void wareneingang(Produkt prod){ lager.addElement(prod); }
  public void warenausgang(Produkt prod){ lager.remove(prod); }
}
```
Ich bekomme immer die Fehlermeldung:
bezahlen() in Kasse cannot be applied to (Warenkorb) 

Das Programm sollte folgende Ausgabe realisieren:
Rasierer 29.9 (4.78 MwSt.)
36 Monate Garantie
Schwäbische Spätzle 5.99 (0.96 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Schinkenwurst 2.99 (0.48 MwSt.)
Summe inkl. MwSt. 61.15
Ende Einkauf 1
Harry Potter 5 26.0 (1.82 MwSt.)
Harry Potter 4 22.0 (1.54 MwSt.)
Harry Potter 3 19.0 (1.33 MwSt.)
Harry Potter 2 17.0 (1.19 MwSt.)
Harry Potter 1 15.0 (1.05 MwSt.)
Summe inkl. MwSt. 105.93
Ende Einkauf 2
Gurke 0.69 (0.11 MwSt.)
Stereoanlage 199.0 (31.84 MwSt.)
24 Monate Garantie
Summe inkl. MwSt. 231.64
Ende Einkauf 3

Es wäre sehr nett, wenn sich mal einer von euch Könnern mein Programm anschauen könnte.
Schon mal vorab danke für jede Hilfe.

Gruß Andreas


----------



## K-Man (11. Jun 2004)

Du rufst bezahlen() direkt von der Klasse Kasse aus. Das geht nur, wenn die Methode static ist...
Also:

```
public static void bezahlen()
```
Ansonsten musst du erst ein Obekt der Klasse Kasse erzeugen, um bezahlen() aufrufen zu können...


----------



## AndreasS (12. Jun 2004)

Danke für deine Hilfe. Leider bekomme ich immer noch die gleiche Fehlermeldung.
Vielleicht weiß ja noch jemand anderes etwas?
Bin für jede Hilfe dankbar.
Gruß Andreas


----------



## KSG9|sebastian (12. Jun 2004)

Du hast eine Klasse Produkt, in die Klasse machst du ne  Methode "bezahlen()" rein:


```
public double bezahlen(){
    return preis;
}
```

So sollte die aussehen.

Weiter: Objekte aus dem Supermarkt darfst du nicht so erzeugen:

```
Buch b = new Buch(..)
```

sondern so:


```
Produkt b = new Buch(..)
```

Desweiteren würde ich an deiner Stelle die Klasse Produkt als 'abstract' deklarieren, da sie nie erzeugt wird.
Wenn du jetzt alles ausrechnen willst, dann brauchst du nur noch deinen Vector durchgehen und jedesmal den Preis holen:


```
double preis = 0;
for(int i=0;i<warenkorb.length();i++){
    preis += ((Produkt)warenkorb.get(i)).bezahlen();
}
```

Ich hoffe mal dass ich dir helfen konnte!


----------



## Illuvatar (12. Jun 2004)

KSG9|plak hat gesagt.:
			
		

> Du hast eine Klasse Produkt, in die Klasse machst du ne  Methode "bezahlen()" rein:
> 
> 
> ```
> ...


Mir kommts eher so vor, als brächte er in der Klasse Kasse eine Methode bezahlen, die einen Warenkorb als Argument bekommt.
Schreib in deine Klasse Kasse diese Methode:

```
public static void bezahlen (Warenkorb w)
{
  //Warenkorb bezahlen
}
```



			
				KSG9|plak hat gesagt.:
			
		

> Weiter: Objekte aus dem Supermarkt darfst du nicht so erzeugen:
> 
> ```
> Buch b = new Buch(..)
> ...


Wieso das denn?




			
				KSG9|plak hat gesagt.:
			
		

> Desweiteren würde ich an deiner Stelle die Klasse Produkt als 'abstract' deklarieren, da sie nie erzeugt wird.
> Wenn du jetzt alles ausrechnen willst, dann brauchst du nur noch deinen Vector durchgehen und jedesmal den Preis holen:
> 
> 
> ...



*zustimm*


----------



## AndreasS (15. Jun 2004)

Erstmal danke für eure Hilfe! Leider habe ich es bis jetzt noch nicht geschafft, das Programm zum laufen zu bringen.
Vielleicht kann mir ja nochmal jemand helfen!? Wäre echt nett...
Habe mal die Vorschläge umgesetzt, jetzt kennt er aber die Variable warenkorb nich...
Hier mein Code, wie er nun aussieht:

```
import java.util.*;

public class Supermarkt {

  public static void main(String[] args) {
    Lager aldiLager=new Lager();                            //Anlegen des Lagers

    /* Füllen des Lagers */
    Buch harrypotter1=new Buch("Harry Potter 1",15);
    aldiLager.wareneingang(harrypotter1);

    Buch harrypotter2=new Buch("Harry Potter 2",17);
    aldiLager.wareneingang(harrypotter2);

    Buch harrypotter3=new Buch("Harry Potter 3",19);
    aldiLager.wareneingang(harrypotter3);

    Buch harrypotter4=new Buch("Harry Potter 4",22);
    aldiLager.wareneingang(harrypotter4);

    Buch harrypotter5=new Buch("Harry Potter 5",26);
    aldiLager.wareneingang(harrypotter5);

    Elektronikartikel stereoanlage=new Elektronikartikel("Stereoanlage",199,24);
    aldiLager.wareneingang(stereoanlage);

    Elektronikartikel rasierer=new Elektronikartikel("Rasierer",29.90,36);
    aldiLager.wareneingang(stereoanlage);

    Lebensmittel gurke=new Lebensmittel("Gurke",0.69,"20031201");
    aldiLager.wareneingang(gurke);

    Lebensmittel spaetzle=new Lebensmittel("Schwäbische Spätzle",5.99,"20040101");
    aldiLager.wareneingang(gurke);

    Lebensmittel schinkenwurst=new Lebensmittel("Schinkenwurst",2.99,"20041208");
    aldiLager.wareneingang(schinkenwurst);
    /*********************/

    /* Einkauf 1 */
    Warenkorb meinEinkauf=new Warenkorb();
    meinEinkauf.hineinlegen(schinkenwurst);
    meinEinkauf.hineinlegen(harrypotter1);
    meinEinkauf.hineinlegen(spaetzle);
    meinEinkauf.hineinlegen(rasierer);
    Kasse.bezahlen(meinEinkauf);
    System.out.println("Ende Einkauf 1\n");
    /*************/


    /* Einkauf 2 */
    Warenkorb einAndererEinkauf=new Warenkorb();
    einAndererEinkauf.hineinlegen(harrypotter1);
    einAndererEinkauf.hineinlegen(harrypotter2);
    einAndererEinkauf.hineinlegen(harrypotter3);
    einAndererEinkauf.hineinlegen(harrypotter4);
    einAndererEinkauf.hineinlegen(harrypotter5);
    Kasse.bezahlen(einAndererEinkauf);
    System.out.println("Ende Einkauf 2\n");
    /*************/


    /* Einkauf 3 */
    Warenkorb nochEinEinkauf=new Warenkorb();
    nochEinEinkauf.hineinlegen(stereoanlage);
    nochEinEinkauf.hineinlegen(gurke);
    Kasse.bezahlen(nochEinEinkauf);
    System.out.println("Ende Einkauf 3\n");
    /*************/
  }
}
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
//In diesen beiden Klassen stecken die Probleme...
//+++++++++++++++++++++++++++++++++++++++++++++++++++++
class Kasse{
	public static void bezahlen (Warenkorb w) { 
	double preis = 0; 
	  for(int i=0;i<warenkorb.length();i++){ 
      preis += ((Produkt)warenkorb.get(i)).bezahlen(); 
	  }
  	//Warenkorb bezahlen 
	}
	
}

abstract class Produkt {
	//Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public double bezahlen(){ 
        return preis; 
	}
}

class Lebensmittel extends Produkt{
  private String haltbarkeitsdatum;

  public Lebensmittel(String name,double preis,String haltbarkeitsdatum){
    super(name,preis,0.16);

    this.haltbarkeitsdatum=haltbarkeitsdatum;
  }
}

class Elektronikartikel extends Produkt{
  private int garantie;

  public Elektronikartikel(String name,double preis,int garantie){
    super(name,preis,0.16);

    this.garantie=garantie;
  }

  public int getGarantie(){ return(garantie); }
}

class Buch extends Produkt{
  public Buch(String name,double preis){
    super(name,preis,0.07);
  }
}

class Warenkorb {
  private Vector warenkorb=new Vector();

  public void hineinlegen(Produkt prod){ warenkorb.addElement(prod); }
  public void herausholen(Produkt prod){ warenkorb.remove(prod); }
  public int anzahlProdukte(){ return(warenkorb.size()); }
  public Produkt produkt(int i){ return((Produkt)warenkorb.elementAt(i)); }
}

class Lager {
  private Vector lager=new Vector();

  public void wareneingang(Produkt prod){ lager.addElement(prod); }
  public void warenausgang(Produkt prod){ lager.remove(prod); }
}
```

Danke für jede Hilfe!

Gruß Andreas


----------



## Grizzly (15. Jun 2004)

Hi Andreas,

wie ich gerade sehe, bist Du Student in Tübingen. Aber nicht zufällig Informatiker auf dem Sand?


----------



## AndreasS (15. Jun 2004)

Hi,
komme zwar aus Tübingen, aber ich studiere Wirtschaftsinformatik in Albstadt.
Kann ein paar Programmiersprachen ganz gut, aber die Vererbung etc. in Java will nicht in meinen Kopf.
Na ja, man kann alles lernen!
Vielleicht kennst du dich ja aus?!
Gruß Andreas


----------



## Grizzly (15. Jun 2004)

Hab' mal den Code neu formatiert:

```
public class Supermarkt {
	
	public static void main(String[] args) {
		//Anlegen des Lagers
		Lager aldiLager = new Lager();
		
		/* Füllen des Lagers */
		Buch harrypotter1 = new Buch("Harry Potter 1", 15);
		aldiLager.wareneingang(harrypotter1);
		
		Buch harrypotter2 = new Buch("Harry Potter 2", 17);
		aldiLager.wareneingang(harrypotter2);
		
		Buch harrypotter3 = new Buch("Harry Potter 3", 19);
		aldiLager.wareneingang(harrypotter3);
		
		Buch harrypotter4 = new Buch("Harry Potter 4", 22);
		aldiLager.wareneingang(harrypotter4);
		
		Buch harrypotter5=new Buch("Harry Potter 5", 26);
		aldiLager.wareneingang(harrypotter5);
		
		Elektronikartikel stereoanlage = new Elektronikartikel("Stereoanlage", 199, 24);
		aldiLager.wareneingang(stereoanlage);
		
		Elektronikartikel rasierer = new Elektronikartikel("Rasierer", 29.90, 36);
		aldiLager.wareneingang(stereoanlage);
		
		Lebensmittel gurke = new Lebensmittel("Gurke", 0.69, "20031201");
		aldiLager.wareneingang(gurke);
		
		Lebensmittel spaetzle = new Lebensmittel("Schwäbische Spätzle", 5.99, "20040101");
		aldiLager.wareneingang(gurke);
		
		Lebensmittel schinkenwurst = new Lebensmittel("Schinkenwurst", 2.99, "20041208");
		aldiLager.wareneingang(schinkenwurst);
		
		//==========================
		
		/* Einkauf 1 */
		Warenkorb meinEinkauf = new Warenkorb();
		meinEinkauf.hineinlegen(schinkenwurst);
		meinEinkauf.hineinlegen(harrypotter1);
		meinEinkauf.hineinlegen(spaetzle);
		meinEinkauf.hineinlegen(rasierer);
		Kasse.bezahlen(meinEinkauf);
		System.out.println("Ende Einkauf 1\n");
		
		//==========================
		
		/* Einkauf 2 */
		Warenkorb einAndererEinkauf = new Warenkorb();
		einAndererEinkauf.hineinlegen(harrypotter1);
		einAndererEinkauf.hineinlegen(harrypotter2);
		einAndererEinkauf.hineinlegen(harrypotter3);
		einAndererEinkauf.hineinlegen(harrypotter4);
		einAndererEinkauf.hineinlegen(harrypotter5);
		Kasse.bezahlen(einAndererEinkauf);
		System.out.println("Ende Einkauf 2\n");
		
		//==========================
		
		/* Einkauf 3 */
		Warenkorb nochEinEinkauf = new Warenkorb();
		nochEinEinkauf.hineinlegen(stereoanlage);
		nochEinEinkauf.hineinlegen(gurke);
		Kasse.bezahlen(nochEinEinkauf);
		System.out.println("Ende Einkauf 3\n");
	}
}
```


```
public abstract class Produkt {
	// Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	public Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public double bezahlen(){
		return preis;
	}
}
```


```
public class Lebensmittel extends Produkt{
	private String haltbarkeitsdatum;
	
	public Lebensmittel(String name, double preis, String haltbarkeitsdatum) {
		super(name, preis, 0.16);
		this.haltbarkeitsdatum = haltbarkeitsdatum;
	}
}
```


```
public class Elektronikartikel extends Produkt {
	private int garantie;
	
	public Elektronikartikel(String name, double preis, int garantie) {
		super(name, preis, 0.16);
		this.garantie = garantie;
	}
	
	public int getGarantie() {
		return garantie;
	}
}
```


```
public class Buch extends Produkt {
	public Buch(String name, double preis) {
		super(name, preis, 0.07);
	}
}
```


```
import java.util.Vector;

public class Warenkorb {
	private Vector warenkorb = new Vector();
	
	public Warenkorb() {
		super();
	}
	
	public void hineinlegen(Produkt prod) {
		warenkorb.addElement(prod);
	}
	
	public void herausholen(Produkt prod) {
		warenkorb.remove(prod);
	}
	
	public int anzahlProdukte() {
		return warenkorb.size();
	}
	
	public Produkt getProduktAt(int index) {
		return (Produkt) warenkorb.elementAt(index);
	}
}
```


```
import java.util.Vector;

public class Lager {
	private Vector lager = new Vector();
	
	public Lager() {
		super();
	}
	
	public void wareneingang(Produkt prod) {
		lager.addElement(prod);
	}
	
	public void warenausgang(Produkt prod) {
		lager.remove(prod);
	}
}
```


```
public class Kasse{
	public static void bezahlen(Warenkorb w) {
		double preis = 0;
		
		for(int index = 0; index < w.anzahlProdukte(); index++) {
			preis += w.getProduktAt(index).bezahlen();
		}
		//Warenkorb bezahlen
   }
}
```

Der Fehler lag nämlich in der Klasse _Kasse_, was ich allerdings nicht ganz verstehe: Du hast der Klasse Warenkorb zwei wunderbare Methode _anzahlProdukte_ und _getProduktAt_ (ehemals _produkt_). Und dann benutzt Du sie in der Klasse _Kasse_ gar nicht. Stattdessen versuchst Du auf den Warenkorb wie auf ein Objekt der Klasse _Vector_ zuzugreifen. ???:L  :wink:


----------



## P3AC3MAK3R (15. Jun 2004)

Verschoben: OOP.


----------



## AndreasS (15. Jun 2004)

Nochmals danke an alle, die bisher geholfen haben. Leider habe ich immer noch Probleme und komme einfach nicht weiter  .
Die Ausgabe funktioniert immer noch nicht...
So sollte sie aussehen und von der Klasse Kasse aus realiesiert werden:
Das Programm sollte folgende Ausgabe realisieren: 

Rasierer 29.9 (4.78 MwSt.) 
36 Monate Garantie 
Schwäbische Spätzle 5.99 (0.96 MwSt.) 
Harry Potter 1 15.0 (1.05 MwSt.) 
Schinkenwurst 2.99 (0.48 MwSt.) 
Summe inkl. MwSt. 61.15 
Ende Einkauf 1 
Harry Potter 5 26.0 (1.82 MwSt.) 
Harry Potter 4 22.0 (1.54 MwSt.) 
Harry Potter 3 19.0 (1.33 MwSt.) 
Harry Potter 2 17.0 (1.19 MwSt.) 
Harry Potter 1 15.0 (1.05 MwSt.) 
Summe inkl. MwSt. 105.93 
Ende Einkauf 2 
Gurke 0.69 (0.11 MwSt.) 
Stereoanlage 199.0 (31.84 MwSt.) 
24 Monate Garantie 
Summe inkl. MwSt. 231.64 
Ende Einkauf 3 

Bei mir wird jedoch nur:
Ende Einkauf 1 
Ende Einkauf 2
Ende Einkauf 3
ausgegeben.

Außerdem habe ich noch eine Frage an den letzten Antworter. Ich dachte immer, dass der leere Konstruktor nicht implementiert werden muss, da Java ihn ja selbst erstellt???

```
import java.util.Vector; 

public class Lager { 
   private Vector lager = new Vector(); 
// Muss das sein????
   public Lager() { 
      super(); 
   } 
    
   public void wareneingang(Produkt prod) { 
      lager.addElement(prod); 
   } 
    
   public void warenausgang(Produkt prod) { 
      lager.remove(prod); 
   } 
}
```

Bitte helft mir nochmals.

Danke und Gruß 

Andreas


----------



## Grizzly (15. Jun 2004)

Hi AndreasS,

das weniger ausgegeben wird, als Du gerne hättest, liegt daran, dass Du einfach im Programm nicht mehr ausgibst. Probier einfach mal *System.out.println("Text");* an die entsprechenden Stellen im Code zu schreiben. :wink:

Zu Deiner Bemerkung mit dem Konstruktor: Prinzipiel ist es in diesem Fall egal. Ich schreibe ihn halt immer der Vollständigkeit halber hin.


----------



## AndreasS (15. Jun 2004)

wenn ich die Variablen ausgeben will, kommt keine richtige Ausgabe.  
Vielleicht kannst du mir ja nochmal helfen?
Gruß
Andreas


----------



## Grizzly (15. Jun 2004)

AndreasS hat gesagt.:
			
		

> wenn ich die Variablen ausgeben will, kommt keine richtige Ausgabe.  [...]



Wie, es kommt keine richtige Ausgabe? Was kommt denn? :?:


----------



## AndreasS (15. Jun 2004)

Hi,
es kommt folgende Ausgabe:
Einkauf 1

Warenkorb@a18aa2
Einkauf 2

Einkauf 3

wenn ich das probiere:

```
...
System.out.println(einAndererEinkauf); 
      Kasse.bezahlen(einAndererEinkauf); 
      System.out.println("Ende Einkauf 2\n");
```

Irgendwie muss ich doch den verfluchten Warenkorb ausgeben können...

Danke für jede Hilfe

Gruß Andreas


----------



## Grizzly (15. Jun 2004)

Das ist auch klar: Du gibt das Objekt als String aus. Und standardmäßig ist das der Klassenname und eine hexadezimale Zahl.

In diesem Fall musst Du die Methode *toString()* entsprechend überschreiben. Ein Beispiel:


```
public abstract class Produkt {
   // Variablen
   private String name;
   private double preis, mwst;
   
   //Konstruktor
   public Produkt(String name, double preis, double mwst) {
      this.name = name;
      this.preis = preis;
      this.mwst = mwst;
   }
   
   public double bezahlen() {
      return preis;
   }
   
   public String toString() {
      return "Produkt(Name = " + this.name + "; Preis = " + this.preis + "; MwSt = " + this.mwst + ")";
   }
}
```


----------



## AndreasS (15. Jun 2004)

Hi,
habe deinen Vorschlag umgesetzt. Leider kommt immer noch die gleiche falsche Ausgabe, wie vorher beschrieben...
Ich bin am Ende, hoffe du hast noch einen Vorschlag...
Gruß Andreas


----------



## Grizzly (15. Jun 2004)

Wenn Du eine 1:1 Umsetzung Deiner Ausgabe haben willst, musst Du die Ausgabe in die Methode *Warenkorb.hineinlegen(Produkt prod);* einbauen.

Dazu musst Du die Klassen folgendermaßen anpassen:

```
public abstract class Produkt {
	// Variablen
	private String name;
	private double preis, mwst;
	
	//Konstruktor
	public Produkt(String name, double preis, double mwst) {
		this.name = name;
		this.preis = preis;
		this.mwst = mwst;
	}
	
	public String getName() {
		return this.name;
	}
	
	public double getPreis() {
		return this.preis;
	}
	
	public double getMwSt() {
		return this.mwst;
	}
}
```

P.S.: _getPreis()_ ist besser als _bezahlen()_, da ansonsten die Abstraktion nicht passt: Das Produkt bezahlt ja nichts.


```
public class Kasse{
	public static void bezahlen(Warenkorb w) {
		double preis = 0;
		
		for(int index = 0; index < w.anzahlProdukte(); index++) {
			preis += w.getProduktAt(index).getPreis();
		}
		//Warenkorb bezahlen
   }
}
```


```
import java.util.Vector;

public class Warenkorb {
	private Vector warenkorb = new Vector();
	
	public Warenkorb() {
		super();
	}
	
	public void hineinlegen(Produkt prod) {
		System.out.println(prod.getName() + " " + prod.getPreis() + " (" + prod.getMwSt() + " MwSt.)");
		warenkorb.addElement(prod);
	}
	
	public void herausholen(Produkt prod) {
		warenkorb.remove(prod);
	}
	
	public int anzahlProdukte() {
		return warenkorb.size();
	}
	
	public Produkt getProduktAt(int index) {
		return (Produkt) warenkorb.elementAt(index);
	}
}
```

Sodele, und damit ich nicht Deine ganzen Hausaufgaben mache (ist nämlich nicht Sinn dieses Forums):

1. Der Warenkorb gibt nun bei jedem Produkt den Namen, den Preis und die Mehrwertsteuer aus. Bei den Subklassen werden jedoch die zusätzlichen Attribute nicht ausgegeben.

2. Die Summe wird momentan beim Bezahlen an der Kasse noch nicht ausgegeben.

Darüber kannst Du Dir ja mal den Kopf zerbrechen... :wink:


----------



## AndreasS (15. Jun 2004)

Danke für deine super Hilfe!
Habe mal wieder was gelernt. Natürlich werde ich mir jetzt noch ein bischen den Kopf zerbrechen (Summe ausgeben)...
Aber das ist ja auch Sinn der Sache. Sonst lernt man ja nichts.  
Gruß 
Andreas


----------

