Hi,
ich verstehe folgendes nicht:
Normalerweise(angefangen bei der "D" Klasse) müsste es ja zunächst der
D-Konstruktor aufgerufen werden, welcher quasi ein "unsichtbares" super() in der ersten
Zeile stehen hat. Also geht es "rauf" zu der A-Klassen-Konstruktor und danach wieder
zurück zum Konstruktor von D.
Sobald die Methode d.gibEinA() ausgeführt wird will er ja "super.gibA()" rechnen, und
geht also in die Oberklasse wo steht: return this.a. Nun, ich dachte immer "this" würde sich
immer auf das ursprüngliche Objekt beziehen, und somit müsste doch 100 herauskommen, so
wie es in Klasse D steht und nicht etwa -1. Okay, man kann wohl schlussfolgern, wenn man
in D Konstruktor nicht stehen hat a = 100 dann nimmt er einfach das a von der Oberklasse.
Stimmt aber auch nicht... er nimmt weiterhein -1 als Ergebnis. Nun könnte man schlussfolgern,
dass er einfach bei Namensgleichheit von Variablen in einer Vererbung einfach immer die höhere Variable nimmt und deshalbt -1 herauskommt und beim zweiten Aufruf deshalb die Variable von der wirklichen Klasse.
Irgendwie verwirrt mich das gerade zutiefst... Mag das vielleicht jemand erläutern warum das
so ist :autsch:
Denn, wenn ich folgendes stehen hätte:
Benutzt er anscheinend nicht einfach das a bzw. b von der Oberklasse sondern
das von der Instanzklasse.... Also in diesem Fall von der Klasse B.
ich verstehe folgendes nicht:
Java:
public class A {
//Instanzvariablen
public int a = -1;
//Konstruktor
public A() {}
//Methode
public int gibA() {
return this.a;
}
}
----------------------------------------------------------
public class D extends A {
//Instanzvariablen
public int a = 100;
//Konstruktor
public D() {}
//Methode
public int gibEinA() {
return super.gibA();
}
}
----------------------------------------------------------
public class Test {
public static void main(String[] args) {
D d = new D();
System.out.println(d.gibEinA());
System.out.println(d.a);
}
}
----------------------------------------------------------
Normalerweise(angefangen bei der "D" Klasse) müsste es ja zunächst der
D-Konstruktor aufgerufen werden, welcher quasi ein "unsichtbares" super() in der ersten
Zeile stehen hat. Also geht es "rauf" zu der A-Klassen-Konstruktor und danach wieder
zurück zum Konstruktor von D.
Sobald die Methode d.gibEinA() ausgeführt wird will er ja "super.gibA()" rechnen, und
geht also in die Oberklasse wo steht: return this.a. Nun, ich dachte immer "this" würde sich
immer auf das ursprüngliche Objekt beziehen, und somit müsste doch 100 herauskommen, so
wie es in Klasse D steht und nicht etwa -1. Okay, man kann wohl schlussfolgern, wenn man
in D Konstruktor nicht stehen hat a = 100 dann nimmt er einfach das a von der Oberklasse.
Stimmt aber auch nicht... er nimmt weiterhein -1 als Ergebnis. Nun könnte man schlussfolgern,
dass er einfach bei Namensgleichheit von Variablen in einer Vererbung einfach immer die höhere Variable nimmt und deshalbt -1 herauskommt und beim zweiten Aufruf deshalb die Variable von der wirklichen Klasse.
Irgendwie verwirrt mich das gerade zutiefst... Mag das vielleicht jemand erläutern warum das
so ist :autsch:
Denn, wenn ich folgendes stehen hätte:
Java:
public class A {
public int a;
public int b;
public A() {
this.a = 0;
this.b = 40;
}
public void erhoehe(int summand) {
a = a + summand;
}
public int gibWert() {
return 2 * a;
}
}
----------------------------------------------------------
public class B extends A {
public int b;
public B() {
this.a = 10;
this.b = 100;
}
@Override
public int gibWert() {
return b * super.gibWert();
}
}
----------------------------------------------------------
public class Test {
private static void testeSuper() {
A a = new A();
B b = new B();
b.erhoehe(20);
System.out.println(b.gibWert());
}
public static void main(String[] args) {
testeSuper();
}
}
----------------------------------------------------------
Benutzt er anscheinend nicht einfach das a bzw. b von der Oberklasse sondern
das von der Instanzklasse.... Also in diesem Fall von der Klasse B.
Zuletzt bearbeitet: