Hallo zusammen,
Ich fasse mich mal möglichst kurz. Habe eine Klasse A und ihre Subklasse B ( und noch eine klasse zum ausführen). Die Klasse B überschreibt die Methode addiere(int x) aus A. Ich habe testweise ein paar rechnungen durchgeführt und konnte zwei der Ergebnisse überhaupt nicht nachvollziehen. Bin alle Möglichkeiten schritt für schritt durchgegangen die mir eingefallen sind. Habe die beiden Stellen im Code durch Kommentare markiert.
Konsolenausgabe:
10 11 21 13
20 21 41 142 142 33
Bei bestem Willen verstehe ich nicht, wo zur Hölle die beiden 142 herkommen sollen.
Habe ich richtig verstanden, dass this.y und super.y auf das gleiche Attribut zeigen? Der B-Konstruktor ruft ja "unsichtbar" den A-Konstruktor auf, damit sind einA.x = 1, einA.y = 2 und einB.x = 1, also müssten sowohl this.y als auch super.y gleich 2 sein. Oder?
Ich fasse mich mal möglichst kurz. Habe eine Klasse A und ihre Subklasse B ( und noch eine klasse zum ausführen). Die Klasse B überschreibt die Methode addiere(int x) aus A. Ich habe testweise ein paar rechnungen durchgeführt und konnte zwei der Ergebnisse überhaupt nicht nachvollziehen. Bin alle Möglichkeiten schritt für schritt durchgegangen die mir eingefallen sind. Habe die beiden Stellen im Code durch Kommentare markiert.
Java:
public class A {
protected int x;
protected int y;
protected static int z;
public A() {
x++;
y++;
z++;
}
public void addiere(int x) {
this.x = this.x + x;
this.y = this.y + 2 * x;
z = z + x; // Zeitpunkt a
System.out.println(x);
System.out.println(this.x);
System.out.println(this.y);
System.out.println(z);
}
}
Code:
public class B extends A {
protected int x;
public B() {
x++;
y++;
z++;
}
public void addiere(int x) {
this.x = this.x + x;
super.x = super.x + 2 * x;
this.y = this.y + 3 * x; // x = 20 => this.y = 2+3*20
super.y = super.y + 4 * x; // x=20 => super.y = 2+4*20
z = z + x; // Zeitpunkt b
System.out.println(x);
System.out.println(this.x);
System.out.println(super.x);
System.out.println(this.y); // Wieso 142 und nicht 62 ?
System.out.println(super.y); // Wieso 142 und nicht 82 ?
System.out.println(z);
}
}
Java:
public class Ausfuehren {
public static void main(String[] args) {
A einA = new A();
A einB = new B();
einA.addiere(10);
System.out.println();
einB.addiere(20);
}
}
Konsolenausgabe:
10 11 21 13
20 21 41 142 142 33
Bei bestem Willen verstehe ich nicht, wo zur Hölle die beiden 142 herkommen sollen.
Habe ich richtig verstanden, dass this.y und super.y auf das gleiche Attribut zeigen? Der B-Konstruktor ruft ja "unsichtbar" den A-Konstruktor auf, damit sind einA.x = 1, einA.y = 2 und einB.x = 1, also müssten sowohl this.y als auch super.y gleich 2 sein. Oder?