grüß euch
um das themengebiet vererbung und polymorphie zu veranschaulichen, muss ich ein bisschen java code schreiben.
es gibt 3 ebenen bzw. generationen von klassen in diesem kontext:
Lebensmittel
Speise , Getraenke
Brot , Wurst , Wasser , Mate
(ja, der studentischen hilfkraft ist offensichtlich wirklich als zweites Getränk nach wasser "mate" eingefallen..)
die konstruktoren der 4 "jüngsten" klassen brauchen alle 2 parameter: String markenname, int menge. mit diesen beiden parametern ruft der konstruktor den konstruktor der superklasse (also je nach dem Speise oder Getraenke) auf, der die selben parameter braucht, und übergibt sie also an den superklassenkonstruktor. dieser superklassenkonstruktor ruft seinerseits wieder seinen superklassenkonstruktor auf, also den von Lebensmittel, und auch hier wieder parameterübergabe.
alles soweit kein problem, das programm steht, eine testklasse "Kuehlschrank" läuft auch fast problemlos. das einzige problem tritt in zusammenhang mit der klasse Brot auf, denn da gibt es eine besonderheit. der konstruktor von Brot braucht 2 parameter: int typ, int menge. wobei typ==0 bewirken soll, dass an den superklassenkonstrukor als name "Weißbrot" weitergeben wird. für typ==1 soll es "Schwarzbrot" sein, für typ==2 "Mischbrot" und für alles andere "Spezial-Brot".
ich hänge an folgender stelle: wenn der konstruktor einen (nicht parameterfreien) superkonstruktor aufrufen soll, dann muss das an erster stelle passieren. für Brot also in etwa so:
selbstverständlich brauche ich jetzt noch einen code-fetzen, der "typ" per if-ketten in den jeweiligen String übersetzt, damit ich der super()-methode "name" mitgeben kann. ich hab das so gelöst:
aber das funktioniert nicht wie erhofft, denn natürlich übergibt die methode erst "name" (also beim ersten durchgang "null") und ändert name dann in den entsprechenden brottyp. beim zweiten durchlauf wird dann also zb "Schwarzbrot" ausgespuckt, weil im ersten durchgang typ==1 war, und im dritten durchgang bekomme ich entsprechend den typ aus durchgang 2 etc.
ich bitte um hilfe!
ps, falls es wichtig sein sollte, hier der komplette code von Brot, Speise und Lebensmittel:
um das themengebiet vererbung und polymorphie zu veranschaulichen, muss ich ein bisschen java code schreiben.
es gibt 3 ebenen bzw. generationen von klassen in diesem kontext:
Lebensmittel
Speise , Getraenke
Brot , Wurst , Wasser , Mate
(ja, der studentischen hilfkraft ist offensichtlich wirklich als zweites Getränk nach wasser "mate" eingefallen..)
die konstruktoren der 4 "jüngsten" klassen brauchen alle 2 parameter: String markenname, int menge. mit diesen beiden parametern ruft der konstruktor den konstruktor der superklasse (also je nach dem Speise oder Getraenke) auf, der die selben parameter braucht, und übergibt sie also an den superklassenkonstruktor. dieser superklassenkonstruktor ruft seinerseits wieder seinen superklassenkonstruktor auf, also den von Lebensmittel, und auch hier wieder parameterübergabe.
alles soweit kein problem, das programm steht, eine testklasse "Kuehlschrank" läuft auch fast problemlos. das einzige problem tritt in zusammenhang mit der klasse Brot auf, denn da gibt es eine besonderheit. der konstruktor von Brot braucht 2 parameter: int typ, int menge. wobei typ==0 bewirken soll, dass an den superklassenkonstrukor als name "Weißbrot" weitergeben wird. für typ==1 soll es "Schwarzbrot" sein, für typ==2 "Mischbrot" und für alles andere "Spezial-Brot".
ich hänge an folgender stelle: wenn der konstruktor einen (nicht parameterfreien) superkonstruktor aufrufen soll, dann muss das an erster stelle passieren. für Brot also in etwa so:
Java:
class Brot extends Speise{
public Brot(int typ, int menge){
super(name, menge);
}
}
selbstverständlich brauche ich jetzt noch einen code-fetzen, der "typ" per if-ketten in den jeweiligen String übersetzt, damit ich der super()-methode "name" mitgeben kann. ich hab das so gelöst:
Java:
super(name, menge);
if(typ==0){name="Weißbrot";}
else{
if(typ==1){name="Schwarzbrot";}
else{
if(typ==2){name="Mischbrot";}
else{name="Spezialbrot";}
}
}
aber das funktioniert nicht wie erhofft, denn natürlich übergibt die methode erst "name" (also beim ersten durchgang "null") und ändert name dann in den entsprechenden brottyp. beim zweiten durchlauf wird dann also zb "Schwarzbrot" ausgespuckt, weil im ersten durchgang typ==1 war, und im dritten durchgang bekomme ich entsprechend den typ aus durchgang 2 etc.
ich bitte um hilfe!
ps, falls es wichtig sein sollte, hier der komplette code von Brot, Speise und Lebensmittel:
Java:
package aufg6;
public abstract class Lebensmittel {
protected String name;
protected int menge; // in Milliliter bzw. Gramm
public Lebensmittel(String name, int menge) {
this.name = name;
this.menge = menge;
}
public abstract boolean essen();
public abstract boolean trinken();
public abstract String status();
}
...............................
package aufg6;
public class Speise extends Lebensmittel{
protected int verzehreinheit;
public Speise(String name, int menge){
super(name, menge);
}
public boolean essen(int menge){
if(this.menge>=menge){
this.menge=this.menge-menge;
return true;
}
else{
return false;
}
}
public boolean trinken(){
return false;
}
public String status(){
return getClass().getSimpleName() +"\n"
+ name + "\n"
+ menge+"g";
}
}
.......................
package aufg6;
public class Brot extends Speise{
protected static String name=new String();
public Brot(int typ, int menge){
super(name, menge);
verzehreinheit=50;
if(typ==0){
name="Weißbrot";
}
else{
if(typ==1){
name="Schwarzbrot";
}
else{
if(typ==2){
name="Mischbrot";
}
else{
name="Spezialbrot";
}
}
}
}
public boolean essen(){
if(menge>=verzehreinheit){
essen(verzehreinheit);
return true;
}
else{
return false;
}
}
}