Guest

Untitled

By: a guest on Jan 28th, 2012  |  syntax: None  |  size: 2.75 KB  |  hits: 19  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. Aufgabe 2)
  2. Allgemein: Methode m wird von den einzelnen Klassen entweder überladen oder ganz überschrieben.
  3. Die Klasse C steht im Diagramm ganz oben, sie hat die Unterklassen E und A, E hat wiederum die Unterklassen D und B.
  4. 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.
  5.  
  6.  
  7. C c = new C();
  8. c.m();
  9.  
  10. Ausgabe: Erwischt!
  11. Begründung: c ist vom Typ C, Methode m aus C wird aufgerufen.
  12.  
  13. A a = new A();
  14. a.m();
  15.  
  16. Ausgabe: Erwischt!
  17. Getroffen!
  18. 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.
  19.  
  20. D d = new D();
  21. d.m();
  22.  
  23. Ausgabe: Vielleicht!
  24. Begründung: Methode m aus Klasse D wird aufgerufen.
  25.  
  26. B b = new B();
  27. b.m();
  28.  
  29. Ausgabe: Erwischt!
  30. 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.
  31.  
  32. B b2 = new B();
  33. b2.m(7);
  34.  
  35. Ausgabe: Erwischt!
  36. In Echt?
  37. 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.
  38. E e = new E();
  39. e.m();
  40. e.m(7);
  41.  
  42. Ausgabe: Erwischt!
  43. 7 mal!
  44. 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.
  45.  
  46. E e2 = new D();
  47. e2.m();
  48. e2.m(7);
  49.  
  50. Ausgabe: Vielleicht!
  51. 7 mal!
  52. 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.
  53.  
  54. E e3 = new B();
  55. e3.m();
  56. e3.m(7);
  57.  
  58. Ausgabe: Erwischt!
  59. Erwischt!
  60. In Echt?
  61. 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.
  62.  
  63. C c2 = new A();
  64. c2.m();
  65.  
  66. Ausgeb: Erwischt!
  67. Getroffen!
  68. Begründung: Durch dyn. Methodenzuweisung wird m aus A aufgerufen, super.m() gibt "Erwischt!" aus, danach erfolgt die Ausgabe von "Getroffen!"