# Vererbung in Java ( Koffer packen )



## Kartoffelbrei (11. Mai 2014)

Guten Nachmittag,

ich weiss es eine ganz schlechte Tugend mit seinem ersten Post schon um etwas Hilfe zu bitten 

Ich habe ein Problem beim lösen einer Aufgabe für die Hochschule ( Java Programmieren 2 ). Entwicklungsumgebung ist BlueJ.

Das Thema unter welchem diese Aufgabe steht ist der Vererbung. Das Ziel ist einen Koffer zu packen.

Es soll 3 Hierarchie Ebene geben. In meinem Fall Gegenstände, darunter in einer Ebene Klamotten, darunter für Klamotten noch ein paar passende Klassen (Pullover, Jacke...) . Dann soll es noch eine Klasse Koffer geben, welche über eine ArrayList verfügt in die man Dinge vom Typ Gegenstände hineinlegen kann und das Gesamtgewicht des Koffers  ( Koffer hat auch ein Eigengewicht ) bestimmen kann. Alle Objekte vom Typ Gegenstände haben ein eigenes Gewicht.

Mein Problem hierbei ist das Gesamtgewicht des Koffers zu bestimmen. Es sollen die Gewichte der in der Klasse Koffer abgelegten ArrayList addiert werden und noch das Eigengewicht des Koffers.
Es ist an sich kein Problem dieses Gewicht zu bestimmen, jedoch ist mein Dozent nicht mit meiner funktionsfähigen Lösung zufrieden :


```
public class Koffer
{
    public ArrayList<Gegenstaende> inhaltliste; // ArrayListe vom Typ Klamotten 
    private int gesamtgewicht; // 
    private int eigengewicht;

    /**
     * Konstruktor für Objekte der Klasse Koffer.
     */
    public Koffer(int eigengewicht)
    {
        inhaltliste =  new ArrayList<Gegenstaende>();
        this.eigengewicht = eigengewicht;
        gesamtgewicht = eigengewicht + gesamtgewicht;
    }

    /**
     * Entfernt angegebens Objekt aus dem Koffer.
     */
    public void rausSachen(Gegenstaende gegenstaende)
    {
        gesamtgewicht = gesamtgewicht - gegenstaende.gibGewicht();
        inhaltliste.remove(gegenstaende);
    }

    /**
     * Fügt angegebenes Objekt in den Koffer.
     */
    public void inKoffer(Gegenstaende gegenstaende)
    {
        inhaltliste.add(gegenstaende);
        gesamtgewicht = gesamtgewicht + gegenstaende.gibGewicht();
    }

    /**
     * Gibt die Größe der ArrayList aus.
     * 
     * @return inhaltliste.size()   Größe der ArrayList inhatliste   
     */
    public int listeanzahl()
    {
        return inhaltliste.size();
    }

    public int gibGewicht()
    {
        return gesamtgewicht;        
    }
```


```
public class Gegenstaende
{
    private int gewicht; // Gewicht des Objekts

    /**
     * Konstruktor für Objekte der Klasse Gegenstaende.
     *
     * @param gewicht   das Gewicht der Gegenstaende.
     *
     */
    public Gegenstaende(int gewicht)
    {
        this.gewicht = gewicht;           
    }

    /**
     *  Liefert das Gewicht des Objekts.
     *  
     *  @return groesse    das Gewicht des Objekts.
     */
    public int gibGewicht()
    {
        return gewicht;
    }     
}
```


```
public class Klamotten extends Gegenstaende
{
    private String farbe;

    /**
     * Konstruktor für Obejkte der Klasse Klamotten.
     *
     * @param gewicht   das Gewicht des Pullover.
     *
     */
    public Klamotten(int gewicht, String farbe)
    {
        super(gewicht);
        this.farbe = farbe;
    }

    /**
     *  Liefert das Gewicht des Objekts.
     *  
     *  @return groesse    das Gewicht des Objekts.
     */
    public String gibFarbe()
    {
        return farbe;
    }     
}
```


```
public class TShirt extends Klamotten
{
    private String schnitt; // der Schnitt des Tshirts
    
    /**
     * Konstruktor für Objekte der Klasse TShirt.
     *
     * @param gewicht   das Gewicht des TShirts.
     * @param schnitt   der Schnitt des TShirts.
     * @param farbe     die Farbe
     */
    public TShirt(int gewicht, String farbe, String schnitt)
    {
        super(gewicht,farbe);
        this.schnitt = schnitt;
    }

    /**
     * Gibt das Gewicht, den Schnitt und die Farbe auf die Konsole aus.
     */
    public void anzeigen()
    {
        System.out.println("Gewicht = " + gibGewicht() + "Farbe = " + gibFarbe() + " Schnitt = " + schnitt );
    }
    
    /**
     *  Liefert den Schnitt des TShirts.
     *  
     *  @return schnitt    der Schnitt des TShirts.
     */
    public String gibSchnitt()
    {
        return schnitt;
    }
}
```

Er bemängelt, dass das Gewicht erst berechnet werden sollte, wenn man es wirklich braucht ( macht auch Sinn  ).

Zumindest versuchte ich nun in der Klasse Koffer mit 
	
	
	
	





```
Gegenstaende.gibGewicht();
```
, irgendwie versuchen darüber es zu machen, jedoch erhalte ich dann die Exception "non-static method gibGewicht() cannot be referenced from a static context", ist ja auch vollkommen klar, da ich ja versuch auf ein Objekt zuzugreifen. Jedoch weiss ich nicht wie ich den Fehler beheben kann, ohne static zu verwenden ( sollen wir nicht ). 

Kann mir bitte einer eine Hilfestellung geben wie ich zu meinem Gesamtgewicht komme ? 

Vielen Dank und schönen Sonntag Nachmittag!


----------



## strußi (11. Mai 2014)

du hast alle gegenstände in die List geadded?

dann ist es einfach,

public void gesamtgewicht(){
for( int index =0; index < liste.size(); ...
gesamtgewicht = liste(index).gibGewicht; 
...

und diese methode rufst du auf wenn du sie brauchst


----------



## Kartoffelbrei (11. Mai 2014)

```
public int gesamtgewicht()
    {
        gesamtgewicht = 0;
        for( int i = 0; i < inhaltliste.size(); i++)
        {
            gesamtgewicht = gesamtgewicht + inhaltliste.get(i).gibGewicht(); 
        }
        gesamtgewicht = gesamtgewicht + eigengewicht;
        return gesamtgewicht;
    }
```

Danke strußi hast mich auf den richtigen Weg gebracht!

Problem hiermit gelöst


----------



## strußi (11. Mai 2014)

gern geschehen


----------

