Files
PR2-Aufgaben/U19/Typenumwandulungen.md

1.9 KiB

PR2: U19 Typumwandlungen

public class A {
    public void a() { System.out.println("a"); }
}
public class B extends A {
    public void b() { System.out.println("b"); }
}
public class C extends B {
    public void c() { System.out.println("c"); }
}
public class ABCMain {
    public static void main(String[] args) {
01      A a= new A();
02      B b= new B();
03      C c= new C();
04
05      a.a();
06      b.a();
07      c.a();
08
>09     a.b();
10      b.b();
11      c.b();
12
>13     a.c();
>14     b.c();
15      c.c();
16
<<<17   A x= new B();
18      x.a();
19      x.b();
>20     x.c();
21
<<22    ((A)x).a();
<23     ((B)x).b();
>><24   ((C)x).c();
    }
}

Compilerfehler:

  • Zeile 09: a hat keine Methode b und erbt von nichts
  • Zeile 13: a het keine Methode c und erbt von nichts
  • Zeile 14: b hat keine Methode c und diese wird auch nicht vererbt
  • Zeile 19: x vom typen A hat und erbt auch keine Methode b
  • Zeile 20: x vom typen A hat und erbt auch keine Methode c

Laufzeitfehler:

Zeile 24: Das Object x kann nicht auf C geCasted werden, da Es ein objekt vom Typen (A) B ist und somit nichts mit C zutun hat. Ein Compilerfehler entsthet nicht weil der Compiler zur Compiletime keine Casts überprüft.

Explizite Downcasts:

  • Zeile 23: Hier findet ein Downcast von einem Objekt vom typen A zu einem Objekt vom typen B stadt.

  • Zeile 24: Hier wird versucht vom einem Parent Objekt B auf ein Child objekt C zu casten. Dies slägt jedoch fehl.

Explizite Upcasts:

Zeile 22: Hier findet ein Explizieter Upcast von einen Objekt vom Typen B (A) auf ein Objekt des Typs A stadt. Dieser Hat vorher bereits impliziet stadgefunden aber hier ist der selbe cast nocheinmal Expliziet zu sehen. Am Objekt änder sich hier allerdings nichts.

Impiziete Upcasts:

Zeile 17: Hier sehen wir einen Implizirten Upcast. Hier wird ein Objekt vom Parent Typen A erstellt un ein Child Typ B darin Gespeichert.