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.