Kurze Frage zur Polymorphie

c0rnfl4k3s

Mitglied
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.
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? 😵
 
Ich habs mir jetzt nicht genau angeguckt, aber this.y und super.y sind ein und die selbe Variable, da kein weiteres y-Attribut in der Klasse B erstellt wird.

PS: Somit wird hier...
Java:
        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
...die Variable y zunächst geändert, dann mit dem neuen Wert gerechnet und diesen wieder in y gespeichert.
 

Zurück
Oben