Hallo,
habe eine kleine Frage zu den allseits beliebten dynamischen Bindungen (ich bin mir zumindest relativ sicher, dass es sich bei meiner Frage auch tatsächlich darum dreht).
Folgender Code stammt aus einem Java-Buch:
Die Ausgabe lautet:
Die Ausgabe von "a" ist mir klar. Die Ausgabe von "b" erklär ich mir folgendermaßen. Attribute und Methoden werden an die Unterklassen vererbt, in diesem Fall jedoch überschrieben (richtig?). Die Ausgabe von "c" kann ich jedoch nicht ganz nachvollziehen. Die Variable c bekommt doch in Zeile 28 ein CKlasse-Objekt zugewiesen, welches den Wert 1 hat, warum also die Ausgabe 0? Ist nicht immer der tatsächliche Typ des Objektes relevant (hier: CKlasse) und nicht der deklarierte (hier: AKlasse)? Und selbst wenn das Attribut von c den Wert 0 hat, warum gibt die Methode 1 aus?
Ich befürchte der Groschen ist bei dieser Thematik noch nicht gefallen und bedanke mich bereits im Voraus für etwaige Erklärungsversuche!
habe eine kleine Frage zu den allseits beliebten dynamischen Bindungen (ich bin mir zumindest relativ sicher, dass es sich bei meiner Frage auch tatsächlich darum dreht).
Folgender Code stammt aus einem Java-Buch:
Code:
class AKlasse {
public int wert = 0;
public int wert() {
return this.wert;
}
}
/* ****************************************************************** */
class CKlasse extends AKlasse {
public int wert = 1;
public int wert() {
return this.wert;
}
}
/* ****************************************************************** */
public class ElchTest {
public static void main(String argv[]) {
AKlasse a = new AKlasse();
System.out.println("Wert von a ist: " + a.wert);
System.out.println("Wert von a ist: " + a.wert());
CKlasse b = new CKlasse();
System.out.println("Wert von b ist: " + b.wert);
System.out.println("Wert von b ist: " + b.wert());
AKlasse c = b;
System.out.println("Wert von c ist: " + c.wert);
System.out.println("Wert von c ist: " + c.wert());
}
}
Die Ausgabe lautet:
Code:
Wert von a ist: 0
Wert von a ist: 0
Wert von b ist: 1
Wert von b ist: 1
Wert von c ist: 0
Wert von c ist: 1
Die Ausgabe von "a" ist mir klar. Die Ausgabe von "b" erklär ich mir folgendermaßen. Attribute und Methoden werden an die Unterklassen vererbt, in diesem Fall jedoch überschrieben (richtig?). Die Ausgabe von "c" kann ich jedoch nicht ganz nachvollziehen. Die Variable c bekommt doch in Zeile 28 ein CKlasse-Objekt zugewiesen, welches den Wert 1 hat, warum also die Ausgabe 0? Ist nicht immer der tatsächliche Typ des Objektes relevant (hier: CKlasse) und nicht der deklarierte (hier: AKlasse)? Und selbst wenn das Attribut von c den Wert 0 hat, warum gibt die Methode 1 aus?
Ich befürchte der Groschen ist bei dieser Thematik noch nicht gefallen und bedanke mich bereits im Voraus für etwaige Erklärungsversuche!