Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich habe mal eine folgende Frage: ich habe eine Klasse Klasse1, die folgendermaßen aussieht:
Java:
public class Klasse 1 {
private int summe;
public void summeBerechnenInKlasse1 (int x, int y) {
summe = x+y;
}
}
Die nachfolgende Klasse erweitert Klasse 1:
Java:
public class Klasse2 extends Klasse1 {
private int summe;
public void berechnungInKlasse2(int x, int y) {
summeBerechnenInKlasse1(x, y);
}
}
Ich möchte nämlich, dass beim Aufruf der vererbten Methode "summeBerechnenInKlasse1(x,y)" in der zweiten Klasse die Variable "summe" der Klasse2 verändert wird. Ich glaube aber, so funktioniert es nicht. Könnte mir jemand einen Tipp geben, weshalb es so ist bzw. was hier geändert werden soll?
public class Klasse2 extends Klasse1 {
private int summe;
@Override
public void summeBerechnenInKlasse1(int x, int y) {
super.summeBerechnenInKlasse1(int x, int y);
summe = was auch immer du willst;
}
}
hierbei wird erst summeBerechnenInKlasse1(x, y) von Klasse1 aufgerufen und danach in Klasse2 weitergemacht (natürlich nur wenn du klasse2.summeBerechneninKlasse1(x, y) auf ein Objekt von Klasse2 anwendest)
Generell finde ich ist es ein Designfehler wenn man eine Klasse ableitet und in der Subklasse das gleiche Attribut wieder definiert wie in der Basisklasse!
Eine Möglichkeit wäre folgende:
Java:
public class Klasse1 {
protected int summe;
public void summeBerechnenInKlasse1(int x, int y) {
summe = x + y;
}
}
public class Klasse2 extends Klasse1 {
private int summe;
public void berechnungInKlasse2(int x, int y) {
summeBerechnenInKlasse1(x, y);
summe = super.summe;
}
}
Hierbei wird "summe" in der Basisklasse protected und per "super.summe" kannst du darauf zugreifen und setzt es einfach auf summe von der Klasse2.
Eine andere Möglichkeit wäre folgende:
Java:
public class Klasse1 {
protected int summe;
public void summeBerechnenInKlasse1(int x, int y) {
summe = x + y;
}
public int getSumme(){
return summe;
}
}
public class Klasse2 extends Klasse1 {
private int summe;
public void berechnungInKlasse2(int x, int y) {
summeBerechnenInKlasse1(x, y);
summe = super.getSumme();
}
}
Hierbei verwendest du einfach die getter Methode aus der Superklasse um den Wert von Summe zu bekommen.
Was ich nicht verstehe , warum du hier als Rückgabewert void verwendest, und nicht wie man annehmen könnte als "Ergebnis" z.B Integer (außer natürlich du möchtest den Wert als Member halten) und oder warum du die Methode nicht einfach in der Subklasse überschreibst