Tach Leute ich hab hier eine Aufgabe deren Lösung für mich einfach keinen Sinn macht
wir haben zwei Klassen eine mit ein Paar einfachen Methoden und eine zum Testen.
der Trick ist jetzt das Verständnis der Ausgabe die lautet A B L B X M wenn ich den code richtig gecopypastet hab.
Ich weiß nur nicht wieso ich kann ja mal schritt für schritt schreiben was ich erwarten würde.
Hier die Klassen
Von oo.gg(ff) würde ich erwarten das B gedruckt wird da ff ja von der klasse Mitte ist
aber gut das heißt wohl, der Typ wird von der höchsten Vaterklasse genommen.
also: A
dann oo.gg(uu) wieder irritierend denn uu ist ja sozusagen Unten -> Mitte ->Oben aber okay
vielleicht ist der Typ immer die nächste Vaterklasse.
AB
dann ff.gg(ff) okay ff ist Mitte->Oben also:
ABL soweit sogut
dann ff.gg(uu) uu ist Unten ->Mitte->Oben also
ABLB denn ff hat ja die gg(Mitte) methode von oo
dann uu.gg(ff) ff ist Mitte->Oben uu hat eine eigene gg(Oben) methode also
ABLBX
dann uu.gg(uu) uu ist Unten->Mitte->Oben wird also als Mitte angesehen oder?
aber das stimmt nicht hier wird plötzlich die von ff geerbte Methode gg(Unten) verwendet
obwohl beim ersten Buchstaben die eigentlich klasse ignoriert wurde und statt dessen die Vater klasse
als Typ gesehen wurde wird hier der eigentliche Typ als Typ angesehen,
kann mir jemand den Unterschied erklären?
(die Pfeile -> sollen heißen Sohn->Vater ich kann mir nie merken wie rum die sein müssen)
Ich wäre für Hilfe sehr dankbar denn trotz ausgiebiger Suche in allen Richtungen kann ich mir das einfach nicht klar machen.
cheers pindakaas
wir haben zwei Klassen eine mit ein Paar einfachen Methoden und eine zum Testen.
der Trick ist jetzt das Verständnis der Ausgabe die lautet A B L B X M wenn ich den code richtig gecopypastet hab.
Ich weiß nur nicht wieso ich kann ja mal schritt für schritt schreiben was ich erwarten würde.
Hier die Klassen
Java:
public class Oben {
public void gg (Oben o) { System.out.print("A "); }
public void gg (Mitte m) { System.out.print("B "); }
}
public class Mitte extends Oben {
public void gg (Oben o) { System.out.print("L "); }
public void gg (Unten u) { System.out.print("M "); }
}
public class Unten extends Mitte {
public void gg (Oben o) { System.out.print("X "); }
public void gg (Mitte m) { System.out.print("Z "); }
}
Java:
public class Prog {
public static void test() {
Oben oo = new Oben();
Oben ff = new Mitte();
Unten uu = new Unten();
oo.gg(ff);
oo.gg(uu);
ff.gg(ff);
ff.gg(uu);
uu.gg(ff);
uu.gg(uu);
}
}
Von oo.gg(ff) würde ich erwarten das B gedruckt wird da ff ja von der klasse Mitte ist
aber gut das heißt wohl, der Typ wird von der höchsten Vaterklasse genommen.
also: A
dann oo.gg(uu) wieder irritierend denn uu ist ja sozusagen Unten -> Mitte ->Oben aber okay
vielleicht ist der Typ immer die nächste Vaterklasse.
AB
dann ff.gg(ff) okay ff ist Mitte->Oben also:
ABL soweit sogut
dann ff.gg(uu) uu ist Unten ->Mitte->Oben also
ABLB denn ff hat ja die gg(Mitte) methode von oo
dann uu.gg(ff) ff ist Mitte->Oben uu hat eine eigene gg(Oben) methode also
ABLBX
dann uu.gg(uu) uu ist Unten->Mitte->Oben wird also als Mitte angesehen oder?
aber das stimmt nicht hier wird plötzlich die von ff geerbte Methode gg(Unten) verwendet
obwohl beim ersten Buchstaben die eigentlich klasse ignoriert wurde und statt dessen die Vater klasse
als Typ gesehen wurde wird hier der eigentliche Typ als Typ angesehen,
kann mir jemand den Unterschied erklären?
(die Pfeile -> sollen heißen Sohn->Vater ich kann mir nie merken wie rum die sein müssen)
Ich wäre für Hilfe sehr dankbar denn trotz ausgiebiger Suche in allen Richtungen kann ich mir das einfach nicht klar machen.
cheers pindakaas