Vererbungsproblem

Status
Nicht offen für weitere Antworten.

MASTERmind

Bekanntes Mitglied
hallo!

habe die vaterklasse:
Code:
import java.io.*;

public class Artikel
{
 private int artikelNummer = 0;
 private String bezeichnung = "";
 private double einkaufsPreis = 0;
 private int lagerZeit = 0;
 private double verkaufsPreis = 0;
 
 private final double HANDELSSPANNE = 0.6;
 private final double MWST = 0.16;
 
 public Artikel(int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  this.artikelNummer = artikelNummer;
  this.bezeichnung = bezeichnung;
  this.einkaufsPreis = einkaufsPreis;
  this.lagerZeit = lagerZeit;
 }
 
 public void zeigeArtikelNummer()
 {
  System.out.println("ArtikelNummer: " + artikelNummer);
 }
 
 public void zeigeBezeichnung()
 {
  System.out.println("Bezeichnung: " + bezeichnung);
 }
 
 public void zeigeEinkaufsPreis()
 {
  System.out.println("Einkaufspreis: "  + einkaufsPreis);
 }
 
 public void zeigeLagerZeit()
 {
  System.out.println("Lagerzeit: " + lagerZeit);
 }
 
 public void setArtikelNummer()
 {
  int neuArtikelNummer = 7894561;
  this.artikelNummer = neuArtikelNummer;
 }
 
 public void zeigeVerkaufsPreis()
 {
  verkaufsPreis = einkaufsPreis + einkaufsPreis * 0.6 + einkaufsPreis * 0.16;
  System.out.println("Verkaufspreis: " + verkaufsPreis + " Euro ");
 }
 public static void main(String args[])
 {
  Artikel app = new Artikel(123,"JIMBEAM",12.5,10);
  Artikel app2 = new Artikel(456, "GlenFiddich", 10.9,5);
  app.setArtikelNummer();
  app.zeigeArtikelNummer();
  app.zeigeBezeichnung();
  app.zeigeEinkaufsPreis();
  app.zeigeLagerZeit();
  app.zeigeVerkaufsPreis();
  System.out.println("----------------------");
  app2.zeigeArtikelNummer();
  app2.zeigeBezeichnung();
  app2.zeigeEinkaufsPreis();
  app2.zeigeLagerZeit();
  app2.zeigeVerkaufsPreis();
 }
}

und die kindklasse:

Edit: so sieht die kindklasse jetzt aus

Code:
public class Sonderposten extends Artikel
{
 private double rabatt = 0;

 public Sonderposten(double rabatt, int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  super(artikelNummer, bezeichnung, einkaufsPreis, lagerZeit);
  this.rabatt = rabatt;
 }
 private void zeigeRabatt()
 {
  System.out.println(rabatt);
 }
 
 private void zeigeVerkaufsPreis()
 {
  if(lagerZeit < 10)
  {
   verkaufsPreis = (einkaufsPreis + einkaufsPreis * 0.6 + einkaufsPreis * 0.16) * 0.85;
  }
  else if(lagerZeit > 10)
  {
   verkaufsPreis = (einkaufsPreis + einkaufsPreis * 0.6 + einkaufsPreis * 0.16) * 0.70;
  }
  System.out.println("Verkaufspreis mit Rabatt: " + verkaufsPreis + " Euro");
 }
 
 public static void main(String args[])
 {
  Sonderposten app = new Sonderposten(25.5,123,"JIMBEAM",12.5,10);
  app.zeigeRabatt();
  app.zeigeArtikelNummer();
  app.zeigeVerkaufsPreis();
 }
}


Der Konstruktor der Kindklasse soll um rabatt erweitert werden, aber das läuft nicht

danke für jeden tip
 

matthias333

Mitglied
also mit super() rufst du den konstruktor der "vaterklasse" auf. es gibt bei dir aber nur einen konstruktor mit vier parameter.
deine kindklasse müsste wohl so ausschaun:

Code:
public class Sonderposten extends Artikel
{
private double rabatt = 0;

public Sonderposten(double rabatt, int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
{
  super(artikelNummer, bezeichnung, einkaufsPreis, lagerZeit);
  this.rabatt = rabatt;
}
private void zeigeRabatt()
{
  System.out.println(rabatt);
}
public static void main(String args[])
{
  Sonderposten app = new Sonderposten(25.5);
  app.zeigeRabatt();
}
}
 

MASTERmind

Bekanntes Mitglied
jupp!
das geht, vielen dank:
Code:
Sonderposten app = new Sonderposten(25.5);

muss heissen:
Code:
  Sonderposten app = new Sonderposten(25.5,123,"JIMBEAM",12.5,10);

ich danke
 

MASTERmind

Bekanntes Mitglied
folgende aufgabenstellung war gegeben:

Erstellen Sie eine Klasse Artikel mit den Instanzvariablen artikelNr, bezeichnung, einkaufspreis und lagerzeit (Jahre). Auf die Instanzvariablen darf nur innerhalb der Klasse selbst zugegriffen werden. Deklarieren Sie zwei Konstanten:

heisst das nicht, dass die instanzvariablen private sind???

problem bei private wäre dann aber, dass ich aus der anderen klasse(kindklasse) gar nicht darauf zugreifen könnte.

ergo: müsste ich sie protected deklarieren oder???

dies würde aber der aufgabenstellung nicht entsprechen.

keinen plan :autsch:
 

MASTERmind

Bekanntes Mitglied
kannst du mir mal bitte eine als beispiel schreiben, wie das aussehn soll?
thx

edit:

problem ist, dass es so nicht geht:

Code:
 public void getArtikelNummer()
 {
  this.artikelNummer = artikelNummer;
 }

weil artikelNummer ja private deklariert werden sollte.

wie komme ich trotzdem an artikelNummer ran???
 

mic_checker

Top Contributor
arg.

was macht eine GET methode? Die liefert einen Wert. Sprich:

Code:
public int getArtikelNummer() {
return artikelNummer;
}
 

MASTERmind

Bekanntes Mitglied
ist mir schon klar.
das funzt aber nicht, weil wie gesagt, artikelNummer in der anderen Klasse als private deklariert werden soll.

"artikelNummer has private Access in Artikel"
 

mic_checker

Top Contributor
Du definierst diese Methode in deiner Klasse Artikel, artikelNummer als private, dann kannst du die Methode wie oben beschrieben verwenden.
 

MASTERmind

Bekanntes Mitglied
habe ich ja auch gedacht, aber geht nicht wirklich

hier nochmal der code beider klassen:

vaterklasse

Code:
import java.io.*;

public class Artikel
{
 private int artikelNummer = 0;
 private String bezeichnung = "";
 private double einkaufsPreis = 0;
 private int lagerZeit = 0;
 private double verkaufsPreis = 0;
 
 private final double HANDELSSPANNE = 0.6;
 private final double MWST = 0.16;
 
 public Artikel(int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  this.artikelNummer = artikelNummer;
  this.bezeichnung = bezeichnung;
  this.einkaufsPreis = einkaufsPreis;
  this.lagerZeit = lagerZeit;
 }
 
 public void zeigeArtikelNummer()
 {
  System.out.println("ArtikelNummer: " + artikelNummer);
 }
 
 public void zeigeBezeichnung()
 {
  System.out.println("Bezeichnung: " + bezeichnung);
 }
 
 public void zeigeEinkaufsPreis()
 {
  System.out.println("Einkaufspreis: "  + einkaufsPreis);
 }
 
 public void zeigeLagerZeit()
 {
  System.out.println("Lagerzeit: " + lagerZeit);
 }
 
 public void setArtikelNummer()
 {
  int neuArtikelNummer = 7894561;
  this.artikelNummer = neuArtikelNummer;
 }
 
 public void zeigeVerkaufsPreis()
 {
  verkaufsPreis = einkaufsPreis + einkaufsPreis * 0.6 + einkaufsPreis * 0.16;
  System.out.println("Verkaufspreis: " + verkaufsPreis + " Euro ");
 }
 public static void main(String args[])
 {
  Artikel app = new Artikel(123,"JIMBEAM",12.5,10);
  Artikel app2 = new Artikel(456, "GlenFiddich", 10.9,5);
  app.setArtikelNummer();
  app.zeigeArtikelNummer();
  app.zeigeBezeichnung();
  app.zeigeEinkaufsPreis();
  app.zeigeLagerZeit();
  app.zeigeVerkaufsPreis();
  System.out.println("----------------------");
  app2.zeigeArtikelNummer();
  app2.zeigeBezeichnung();
  app2.zeigeEinkaufsPreis();
  app2.zeigeLagerZeit();
  app2.zeigeVerkaufsPreis();
 }
}

kindklasse
Code:
public class Sonderposten extends Artikel
{
 private double rabatt = 0;

 public Sonderposten(double rabatt, int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  super(artikelNummer, bezeichnung, einkaufsPreis, lagerZeit);
  this.rabatt = rabatt;
 }
 
 public int getArtikelNummer()
 {
  return artikelNummer;
 }
 public static void main(String args[])
 {
  Sonderposten app = new Sonderposten(25.5,123,"JIMBEAM",12.5,10);
  app.getArtikelNummer();
  //app.zeigeRabatt();
  //app.zeigeArtikelNummer();
  //app.zeigeVerkaufsPreis();
  //app.zeigeArtikelNummer();
 }
}
[/code]
 

matthias333

Mitglied
in deiner vaterklasse musst du ne get-methode schreiben
Code:
public int getArtikelNummer {
  return artikelNummer;
}

und in jeder anderen klasse kannst du dann über die get-methode auf die variable zugreifen
Code:
...
Sonderposten sonderposten = new Sonderposten(...);

int artikelNummer = sonderposten.getArtikelNummer();
System.out.println(artikelNummer);

in der kindklasse kannst du aber ganz normal auf die variablen der vaterklasse zugreifen da sie die variablen und methoden ja vererbt bekommt.
 

mic_checker

Top Contributor
Arg, wie matthias schon geschrieben hat gehört die Methode natürlich in Artikel !!!

matthias: er hat die variablen private deklariert, somit hast du auch in Sonderposten keinen direkten Zugriff darauf, sondern musst die getter/setter Methoden verwenden.
 

MASTERmind

Bekanntes Mitglied
ok!
das funzt.
vielen dank auch

ich muss also inner halb der klasse wo die instanzvariablen private sind eine abfrage methode schreiben und kann diese dann aus der kindklasse aufrufen!?

macht sinn.

überschreiben/überladen kann ich die methode aus der vaterklasse in der kindklasse aber schon oder???
 

MASTERmind

Bekanntes Mitglied
ok!
mit get und set erhalte ich zugriff auf den Inhalt der Instanzvariablen, die private sind.

aber wie kann ich mit dem inhalt dieser variablen in der Kindklasse weiterrechnen???

ich möchte in der kindklasse die Methode:

Code:
public double get verkaufsPreis()

um die Größe rabatt überschreiben.

nur leider kann ich auf die zurückgegeben Werte von zb getLAgerZeit nicht zugreifen.


hier noch mal die vaterklasse:

Code:
import java.io.*;

public class Artikel
{
 private int artikelNummer = 0;
 private String bezeichnung = "";
 private double einkaufsPreis = 0;
 private int lagerZeit = 0;
 private double verkaufsPreis = 0;
 
 private final double HANDELSSPANNE = 0.6;
 private final double MWST = 0.16;
 
 public Artikel(int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  this.artikelNummer = artikelNummer;
  this.bezeichnung = bezeichnung;
  this.einkaufsPreis = einkaufsPreis;
  this.lagerZeit = lagerZeit;
 }
 
 public void zeigeArtikelNummer()
 {
  System.out.println("ArtikelNummer: " + artikelNummer);
 }
 
 public void zeigeBezeichnung()
 {
  System.out.println("Bezeichnung: " + bezeichnung);
 }
 
 public void zeigeEinkaufsPreis()
 {
  System.out.println("Einkaufspreis: "  + einkaufsPreis);
 }
 
 public int setArtikelNummer()
 {
  int neuArtikelNummer = 7894561;
  this.artikelNummer = neuArtikelNummer;
  return artikelNummer;
 }
 
 public double getVerkaufsPreis()
 {
  verkaufsPreis = einkaufsPreis + einkaufsPreis * 0.6 + einkaufsPreis * 0.16;
  System.out.println("Verkaufspreis: " + verkaufsPreis);
  return verkaufsPreis;
 }
 
 public int getArtikelNummer()
 {
  System.out.println(artikelNummer);
  return artikelNummer;
 }
 
 public String getBezeichnung()
 {
  return bezeichnung;
 }
 
 public double getEinkaufsPreis()
 {
  return einkaufsPreis;
 }
 
 public int getLagerZeit()
 {
  return lagerZeit;
 }
 
 public static void main(String args[])
 {
  Artikel app = new Artikel(123,"JIMBEAM",12.5,10);
  //Artikel app2 = new Artikel(456, "GlenFiddich", 10.9,5);
 }
}

und hier die kindklasse:

Code:
public class Sonderposten extends Artikel
{
 private double rabatt = 0;

 public Sonderposten(double rabatt, int artikelNummer, String bezeichnung, double einkaufsPreis, int lagerZeit)
 {
  super(artikelNummer, bezeichnung, einkaufsPreis, lagerZeit);
  this.rabatt = rabatt;
 }

 public double getVerkaufsPreis()
 {
  // hier möchte ich den verkaufspreis neu berechnen und damit die alte Methode überschreiben
  // nur ich habe keine ahnung, wie ich von hier aus an den inhalt von zb artikelNummer komme.
  // vielleicht sowas wie
  //int test = Artikel.getArtikelNummer; ???
 }

 public static void main(String args[])
 {
  Sonderposten appSonderposten = new Sonderposten(25.5,123,"JIMBEAM",12.5,10);
  appSonderposten.getRabatt();
 }
}
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen


Oben