jeudi 7 mai 2015

Klassen Verhalten von Klassenvererbung bei Variablen

Hallo,

ich bin Java-Einsteiger und habe gestern eine Übung gemacht, folgende Fragestellung:
"Erstellen Sie unter Verwendung des Konstruktors der Superklasse einen Konstruktor, der die Objekte der Subklasse initialisiert. Die Initialisierung der Instanzvariablen rabatt wird vom Konstruktor je nach Lagerzeit übernommen. Bei einer Lagerzeit größer 12 Monate wird ein Rabatt auf dem Verkaufspreis von 30 Prozent gewährt. Andernfalls beträgt der Rabatt 10 Prozent.Schreiben Sie eine Methode anzeigen() für die Subklasse, die die anzeigen() Methode der Superklasse überschreibt.
Schreiben Sie eine Methode berechneVerkaufspreis(), die ebenfalls die Methode der Superklasse überschreibt."

nun habe ich mir das so vorgestellt, dass wenn ich ein Objekt der Subklasse erstelle er mir auch die Vaiablen der Superklasse übernimmt, ich will ja ein ähnliches Objekt mit den gleichen Variablen erschaffen + zusätzliche Variablen.
Jetzt hab ich aber das Problem, dass er mir die privaten Variablen nicht übernimmt. Muss ich das so wie unten gezeigt mit dem getter machen oder geht das auch anders, ich will ja eigentlich beim Methodenaufruf in der Subklasse auch alle Variablen benutzen können, die in der Superklasse deklariert werden, ich INITIALISIERE ja in der Subklasse über den befehl "super (artNr, bez, lzeit, ekpreis)" "einkaufspreis, bezeichnung, ...".

Vaiation mit GETTER:
Code:

class Artikel {    private String artikelNr, bezeichnung;
    private int lagerzeit;
    private double einkaufspreis;
    final double HANDELSSPANNE = 0.6, MWST = 0.19;


    public Artikel(String artNr, String bez, int lzeit, double ekpreis) {
        artikelNr = artNr; bezeichnung = bez; lagerzeit = lzeit; einkaufspreis = ekpreis;
    }
   
    public void anzeigen() {
        System.out.println("Bezeichnung : " + bezeichnung + "\t Artikelnummer: " + artikelNr + "\t Lagerzeit: " + lagerzeit);
        System.out.println("Einkaufspreis: " + einkaufspreis + "\t Verkaufspreis: " + berechneVerkaufspreis());       
    }
   
    public int berechneVerkaufspreis() {
        return (int)(einkaufspreis * (1 + HANDELSSPANNE) * (1 + MWST));
    }
   
    public int getLagerzeit()
    {
        return lagerzeit;
    }
   
    public double getEinkaufspreis()
    {
        return einkaufspreis;
    }


}

class Sonderposten extends Artikel {
double rabatt;

public Sonderposten (String artNr, String bez, int lzeit, double ekpreis) {
super (artNr, bez, lzeit, ekpreis);
if (getLagerzeit() > 12) {
rabatt = 0.3;
} else {
rabatt = 0.1;
}
}

public int berechneVerkaufspreis() {
return (int)(getEinkaufspreis() * (1 + HANDELSSPANNE) * (1 + MWST) * (1 - rabatt));
}[/CODE]

ich hätte es mir aber die Subklasse eher so vorgestellt und die getter weggelassen:


class Sonderposten extends Artikel {
double rabatt;

public Sonderposten (String artNr, String bez, int lzeit, double ekpreis) {
super (artNr, bez, lzeit, ekpreis);
if (lagerzeit > 12) {
rabatt = 0.3;
} else {
rabatt = 0.1;
}
}

public int berechneVerkaufspreis() {
return (int)(einkaufspreis * (1 + HANDELSSPANNE) * (1 + MWST) * (1 - rabatt));
}[/CODE]

Sollte es dennoch nicht funktionieren, private Variablen an die Subklasse weiterzugeben wäre ich über die Information dankbar, ob ich dann die beste Variante benutzt habe, den neuen Verkaufspreis zu berechnen oder ob es einen besseren Weg gibt. Außerdem wäre ich dann über eine Erklärung sehr dankar, warum es denn nicht möglich ist ein Objekt der Subklasse mit den privaten Variablen der Superklasse zu konstruieren obwohl ich diese beim Aufruf des Konstruktors der Subklasse ja extra die Variablen übergeben muss.


Klassen Verhalten von Klassenvererbung bei Variablen

0 commentaires:

Enregistrer un commentaire