Frage zum Casten von Objekten

MOEP_BIBER

Aktives Mitglied
Hey

hab nochmal ne Frage zum casten von Objekten:

Java:
class A {}
class B extends A {}
class C extends A {}

main:
Java:
A a = new A();
B b = new B();
C c = new C();
a = b;
c = a;

bin mir relativ sicher wie es funktioniert, aber ich frag lieber nochmal nach..
a=b;
das heißt im prinzip a=(A)b oder?
das muss man aber nicht hinschreiben weil implizit gecastet wird?

c=a; gibt nen kompillierfehler da es eigentlich c=(C)a heißen müsste, da downcasting nicht implizit funzt.

generelle frage:
es wird immer das rechte objekt bei einer zuordnung down bzw upgecasted nie das linke oder?

MfG Biber

edit: 1 hit nach 15 minuten um diese zeit. man merkt dass fußball läuft xDDD
 
Zuletzt bearbeitet:
a=b;
das heißt im prinzip a=(A)b oder?
das muss man aber nicht hinschreiben weil implizit gecastet wird?
Richtig. A ist weniger restriktiv als B, deshalb funktioniert das.

c=a; gibt nen kompillierfehler da es eigentlich c=(C)a heißen müsste, da downcasting nicht implizit funzt.
Auch richtig. Das würde aber zur Laufzeit, wenn du explizit casten willst, zu einer ClassCastException führen, weil A nicht in C abgebildet werden kann.

generelle frage:
es wird immer das rechte objekt bei einer zuordnung down bzw upgecasted nie das linke oder?
Die Frage verstehe ich nicht. Betrachte die linke Seite als eine Art "Container". In den A-Container (a, L-Wert, also links der Zuordnung) passt sowohl A, als auch B und C rein. In den B-Container (b, L-Wert) passt nur B rein, aber nicht A. Auch wenn du explizit castest.
Steckst du ein C in A rein, kannst du aber nur noch über die A-Schnittstelle drauf zugreifen, bis du über einen expliziten Cast wieder ein C draus machst (was in diesem Fall funktionieren wird).

Die Objekte behalten ihren Typ immer bei. Aber weil ein C auch ein A ist, kannst du c in a packen.
 
Zuletzt bearbeitet:
ok alles klar soweit.
danke schonmal.

noch ne frage zum downcasten:
Upcasting, downcasting

wann geht das downcasten?
geht es nur wenn ein vorher upgecastetes Objekt wieder downgecastet wird?
(so wie im link)


MfG Biber
 
Zuletzt bearbeitet:
Im Prinzip ja. Wobei das eine sehr theoretische Beschreibung ist.
Praktisch hast du aber nicht immer die Kontrolle über deine Objekte, sodass subjektiv für dich der Eindruck entsteht, dass die Objekte "von selbst" in einem Container höherer Generation stecken.
Gerade wenn man mit Interfaces arbeitet kommt das sehr häufig vor.
Aber man muss nur weit genug zurück im Code gehen, dann findet man eine Stelle, wo irgendwann mal upgecastet wurde.
 

Zurück
Oben