Hallo,
habe folgendes Problem bei diesem Programm:
Hier folgt die Ausgabe
2
2
2
3
Die in Zeile 1 dekl. Methode wird in Subklasse B durch die Zeile 2 überschrieben.
In KLasse B ist m (A a) überladen durch die Methode m( B b).
Zur Übersetzungszeit werden die beiden Methodenaufrufe a.m(a) und a.m(b) an die in Zeile 1 deklarierte Methode gebunden.
Weil Variable a zur Laufzeit ein B-Objekt enthält, wird wegen der dynamischen Methodenauswahl die sie überschreibende Methode der Klasse B ausgeführt, also 2mal "2" ausgegeben.
So stehts in der Erläuterung! Dieser letzte Satz verstehe ich nicht. Zur Laufzeit enthält die Variable a ein B-Objekt, soweit klar. Bei a.m(a) wird 2 ausgegeben, auch klar. Aber müßte bei a.m(b) nicht 3 ausgegeben werden?
[Edit by Beni: Codetags eingefügt]
habe folgendes Problem bei diesem Programm:
Code:
class A {
void m(A a) {System.out.println("1"); //Zeile 1
}
class B extends A {
void m(A a) {System.out.println("2"); //Zeile 2
void m(B a) {System.out.println("3"); //Zeile 3
}
class Test {
public static void main(String[] args) {
B b=new B();
A a=b;
a.m(a);
a.m(b);
b.m(a);
b.m(b);
}
Hier folgt die Ausgabe
2
2
2
3
Die in Zeile 1 dekl. Methode wird in Subklasse B durch die Zeile 2 überschrieben.
In KLasse B ist m (A a) überladen durch die Methode m( B b).
Zur Übersetzungszeit werden die beiden Methodenaufrufe a.m(a) und a.m(b) an die in Zeile 1 deklarierte Methode gebunden.
Weil Variable a zur Laufzeit ein B-Objekt enthält, wird wegen der dynamischen Methodenauswahl die sie überschreibende Methode der Klasse B ausgeführt, also 2mal "2" ausgegeben.
So stehts in der Erläuterung! Dieser letzte Satz verstehe ich nicht. Zur Laufzeit enthält die Variable a ein B-Objekt, soweit klar. Bei a.m(a) wird 2 ausgegeben, auch klar. Aber müßte bei a.m(b) nicht 3 ausgegeben werden?
[Edit by Beni: Codetags eingefügt]