
Untitled
By: a guest on Jan 28th, 2012 | syntax:
None | size: 2.75 KB | hits: 19 | expires: Never
Aufgabe 2)
Allgemein: Methode m wird von den einzelnen Klassen entweder überladen oder ganz überschrieben.
Die Klasse C steht im Diagramm ganz oben, sie hat die Unterklassen E und A, E hat wiederum die Unterklassen D und B.
A überschreibt m aus C, B überschreibt m aus E, C ist Oberklasse, D überläd m aus E und überschreibt m aus C, E überläd m aus C.
C c = new C();
c.m();
Ausgabe: Erwischt!
Begründung: c ist vom Typ C, Methode m aus C wird aufgerufen.
A a = new A();
a.m();
Ausgabe: Erwischt!
Getroffen!
Begründung: a ist vom Typ A, in Klasse A wird Methode m aufgerufen, welche zuerst die Methode m der Oberklasse C aufruft und anschließen "Getroffen!" ausgibt.
D d = new D();
d.m();
Ausgabe: Vielleicht!
Begründung: Methode m aus Klasse D wird aufgerufen.
B b = new B();
b.m();
Ausgabe: Erwischt!
Begründung: Die Ausgabe erfolgt, da m in B eine int-Variable benötigt. Diese wird nicht übergeben, somit wird in der Oberklasse E versucht den Befehl auszuführen, hier fehlt wieder der int-Wert, also wird in der Oberklasse von E (also C) versucht m auszuführen. Dies gelingt.
B b2 = new B();
b2.m(7);
Ausgabe: Erwischt!
In Echt?
Begründung: Hier klappt es im Gegensatz zum Mal davor m aus B aufzurufen, also wird zuerst m der Oberklasse E aufgerufen (ohne übergebenen int-Wert, also wird m aus Oberklasse C ausgeführt) und anschließend das "In echt?" ausgegeben.
E e = new E();
e.m();
e.m(7);
Ausgabe: Erwischt!
7 mal!
Begründung: Abgesehen davon, dass das "Mal" in diesem Fall großgeschrieben werden muss, da es sich (wie schon geschrieben um >>das<< Mal handelt), wird hier zuerst durch e.m() m aus E aufgerufen, da der int-Wert fehlt wird auf die Oberklasse C zurückgegriffen. Durch e.m(7) wird m aus E ausgeführt und "7 mal!" ausgegeben.
E e2 = new D();
e2.m();
e2.m(7);
Ausgabe: Vielleicht!
7 mal!
Begründung: Durch dynamische Methodenzuweisung wird bei e2.m() m aus D aufgerufen. Bei e2.m(7) wird auf die Oberklasse E zurückgegriffen, da die Methode überladen ist und nur m aus E etwas mit der übergebenen "7" anfangen kann.
E e3 = new B();
e3.m();
e3.m(7);
Ausgabe: Erwischt!
Erwischt!
In Echt?
Begründung: Auch hier ist wieder ein Rechtschreibfehler. Echt müsste klein geschrieben werde. Ansonsten: e3.m() ist nur zu m aus C kompatibel, da in B und E ein int verlangt wird. e3.m(7) wird wegen dynamischer Methodenzuweisung die Methode m aus B aufrufen, welche dann m in E aufrufen will (da aber ein übergebener int-Wert fehlt wird m aus C aufgerufen), anschließend wird "In Echt?" ausgegeben.
C c2 = new A();
c2.m();
Ausgeb: Erwischt!
Getroffen!
Begründung: Durch dyn. Methodenzuweisung wird m aus A aufgerufen, super.m() gibt "Erwischt!" aus, danach erfolgt die Ausgabe von "Getroffen!"