Advertisement
Guest User

Untitled

a guest
Dec 12th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.95 KB | None | 0 0
  1. Theorie
  2.  
  3. Statischer Typ: Ist der Typ einer Variablen, die bei der Variablendeklaration angegeben sind. Dieser Typ ist bei der Kompilierung schon bekannt.
  4. - Bei private, final, static Methoden sowie bei Variablen wird immer der statische Typ genutzt.
  5. Dynamischer Typ: Ist der Typ einer Variable, welcher erst zur Laufzeit bekannt ist und kann vom statischen Typen abweichen; Ist der Typ vom Wert der Variable: d.h. der “echte” Typ der Klasse.
  6. - Bei normalen, nicht statischen Methoden, wird der Dynamische Typ verwendet (natürlich nur wenn diese Überschrieben wurde)
  7. Methodensignatur: Kombination aus Name und Übergabetypen einer Methode.
  8. Überschreiben: Überschreiben einer Methode der Elternklasse in der Kindklasse -> Nur bei Veerbung
  9. Überladen: Mehrere Methoden vom gleichen Namen in einer Klasse -> Unterscheiden sich über die Parameterliste (NICHT über Return-Types)
  10. Dynamic Dispatch: Mechanismus in dem die ausgeführte Methode erst zur Laufzeit anhand des dynamischen Typen ermittelt wird.
  11.  
  12. Casts:
  13. - Ändern den statischen Typen
  14. - Bei Bedarf werden subclasses automatisch in ihre superclasses gecastet
  15. - Um von einer superclass in eine subclass zu casten muss dies manuell gemacht werden. Hierzu muss jedoch der dynamische Typ der subclass entsprechen in die gecastet wird, sonst
  16. wirft die JVM eine ClassCastException. ! Nicht zu verwechseln mit dynamic Dispatch !
  17.  
  18. Betrachte einen Aufruf e0.f(e1,...,ek). Ermittlung der aufgerufenen Methode:
  19. - Bestimme die statischen Typen T0,...,Tk der Ausdrücke e0,...,ek.
  20. - Suche in einer Oberklasse von T0 nach einer Methode mit Namen f, deren Liste von Argumenttypen bestmöglich zu der Liste T1,...,Tk passt.
  21. Der Typ I dieser rein statisch gefundenen Methode ist die Signatur der Methode f an dieser Aufrufstelle im Programm.
  22. - Der dynamische Typ D des Objekts, zu dem sich e0 auswertet, gehört zu einer Unterklasse von T0.
  23. - Die Methode f wird nun aufgerufen, deren Typ I ist und die in der nächsten Oberklasse von D implementiert wird.
  24.  
  25. Beispiel:
  26.  
  27. public class A {
  28. public static int x = 0;
  29.  
  30. public static String name() {
  31. return "Klasse A: name";
  32. }
  33.  
  34. public String method() {
  35. return "Klasse A: method";
  36. }
  37. }
  38.  
  39. public class B extends A {
  40. public static int x = 42;
  41.  
  42. public static String name() {
  43. return "Klasse B: name";
  44. }
  45.  
  46. public String method() {
  47. return "Klasse B: method";
  48. }
  49. }
  50.  
  51. public class Main {
  52. public static void main(String[] args) {
  53. B v1 = new B();
  54. System.out.println(v1.x);
  55. System.out.println(v1.name());
  56. System.out.println(v1.method());
  57.  
  58. A v2 = new B();
  59. System.out.println(v2.x);
  60. System.out.println(v2.name());
  61. System.out.println(v2.method());
  62. }
  63. }
  64.  
  65. Ausgabe:
  66. 42
  67. Klasse B: name
  68. Klasse B: method
  69. 0
  70. Klasse A: name
  71. Klasse B: method
  72.  
  73. Statische Wahl Begründungen:
  74. - Speziellste Signatur
  75. - niedrigste Unterklasse
  76. - Eindeutig
  77.  
  78.  
  79. Dynamische Wahl Begründungen:
  80. - stat. Typ = dyn. Typ
  81. - static, Kein Dispatch (-> Wahl nach Statischem Typ, kein dynamic Dispatch)
  82. - dynamisch ein ...
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement