<<abstract>>
Form
Kreis
Rechteck
Quadrat
live
Live
coding
<<abstract>>
Form
Kreis
Rechteck
Quadrat
Upcasting
Downcasting
Upcasting: geht immer âž” implizit
Downcasting: eingeschränkt möglich ➔ nur explizit
<<abstract>>
Form
Kreis
Rechteck
Quadrat
Downcasting
Form f = new Quadrat();
Quadrat q = (Quadrat) f;
Wir mĂĽssen wissen,
dass (Referenz) f aktuell auf ein Quadrat zeigt
explizites Casting
<<abstract>>
Form
Kreis
Rechteck
Quadrat
Upcasting
Form f = new Quadrat();
Rechteck r = new Quadrat();
implizites Upcasting
Live
coding
variablenName instanceof Klassenname
instanceof fungiert hier als Operator
âž” Ergebnis: boolean (wahr/falsch)
Beim Downcasting sollte immer ĂĽberprĂĽft werden,
auf welches Objekt eine Referenz zeigt.
❌
Form form = new Rechteck();
println(((Kreis) form).getRadius());
Form form = new Kreis();
println(((Kreis) form).getRadius());
⚠️
Form form = new Kreis();
if (form instanceof Kreis) {
println(((Kreis) form).getRadius());
}
âś…
Form form = new Rechteck();
if (form instanceof Kreis) {
println(((Kreis) form).getRadius());
}
âś…
Live
coding
Type-Casting ermöglicht Konvertieren von
Objekten entlang der Vererbungshierarchie
↑Upcasting (von unten nach oben) geht immer
↓Downcasting (von oben nach unten) geht nur explizit:
A a = (A) b; // b muss vom Typ A sein, sonst ❌
​Type-Casting wird erst zur Laufzeit durchgeführt
​konkrete Typen unbedingt zur Laufzeit prüfen
→ instanceof-Operator