Hi!
Nachdem ich immer versuche die Logik hinter den Spracheigenschaften zu verstehen, was mir auch sehr beim Erlernen von Java geholfen hat, bin ich nun auf ein paar Fragen gestossen wozu ich gerne mal eure Meinung hören würde.
Und zwar ist mir folgendes aufgefallen:
Erste Frage:
Dem Polymorphismus zufolge ruft dieses Konstrukt ...
... die (evtl. überschriebene) bla() Methode in Unter auf. - logisch
Wenn man jetzt nach dieser Logik geht dann müsste doch das hier
5 ergeben. Aber nein... es verhält sich als ob der Typ statisch wäre und gibt das i vom Ober Objekt aus.
Ich kann nicht ganz nachvollziehen warum... jemand mit mehr Ahnung hier?
____________________________
Zweite Frage:
Hier wird "ich bin die unterklasse" ausgegeben obwohl foo() nur in der Oberklasse verfügbar ist und man denken könnte dass dieser also auch die Methode aus der selben Klasse verwendet. OK, es ist aber noch nachvollziehbar wenn man davon ausgeht, dass einfach immer die aktuellste Methode verwendet werden soll.
Was mich allerdings stört ist das hier:
Sogar hier wird das write() aus der erbenden Klasse aufgerufen, wo doch der Kosntruktor aus Ober eben das "obere Objekt" initialisieren soll.
Naja... das wärs erstmal, für Denkanstösse wär ich euch dankbar!
Nachdem ich immer versuche die Logik hinter den Spracheigenschaften zu verstehen, was mir auch sehr beim Erlernen von Java geholfen hat, bin ich nun auf ein paar Fragen gestossen wozu ich gerne mal eure Meinung hören würde.
Und zwar ist mir folgendes aufgefallen:
Erste Frage:
Dem Polymorphismus zufolge ruft dieses Konstrukt ...
Code:
class Ober {
int i = 3;
void bla() {
// tut irgendwas
}
}
class Unter extends Ober {
int i = 5;
void bla() {
// macht es noch viel besser
}
}
...
Ober o = new Unter();
o.bla();
Wenn man jetzt nach dieser Logik geht dann müsste doch das hier
Code:
System.out.println(o.i);
Ich kann nicht ganz nachvollziehen warum... jemand mit mehr Ahnung hier?
____________________________
Zweite Frage:
Code:
class Ober {
void foo() {
write();
}
void write() {
System.out.println("ich bin die oberklasse");
}
}
class Unter extends Ober {
void write() {
System.out.println("ich bin die unterklasse");
}
}
...
Ober o = new Unter();
o.foo();
Hier wird "ich bin die unterklasse" ausgegeben obwohl foo() nur in der Oberklasse verfügbar ist und man denken könnte dass dieser also auch die Methode aus der selben Klasse verwendet. OK, es ist aber noch nachvollziehbar wenn man davon ausgeht, dass einfach immer die aktuellste Methode verwendet werden soll.
Was mich allerdings stört ist das hier:
Code:
class Ober {
Ober() {
write();
}
void write() {
System.out.println("ich bin die oberklasse");
}
}
class Unter extends Ober {
void write() {
System.out.println("ich bin die unterklasse");
}
}
...
Ober o = new Unter();
Sogar hier wird das write() aus der erbenden Klasse aufgerufen, wo doch der Kosntruktor aus Ober eben das "obere Objekt" initialisieren soll.
Naja... das wärs erstmal, für Denkanstösse wär ich euch dankbar!