Forum: PC-Programmierung JAVA: Cast Double nach Object


von Maxim (Gast)


Lesenswert?

Object obj = (Object) new Double(1);
System.out.println(obj.getClass());

Warum liefert obj.getClass() "Double" und nicht "Object", wo doch 
gecastet wurde?

von Maxim (Gast)


Lesenswert?

Noch eine Frage nebenbei: Das Casten geht in der Hierarchie nur nach 
unten, oder? Also kann man Object in jeden Typ unwandeln, aber niemals 
umgekehrt?

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Maxim schrieb:
> Object obj = (Object) new Double(1);
> System.out.println(obj.getClass());
>
> Warum liefert obj.getClass() "Double" und nicht "Object", wo doch
> gecastet wurde?

1. In diesem Fall brauchst Du nicht casten
2. getClass() liefert die Run Time Type Information, in diesem Fall 
Double

von Michael G. (linuxgeek) Benutzerseite


Lesenswert?

Maxim schrieb:
> Noch eine Frage nebenbei: Das Casten geht in der Hierarchie nur nach
> unten, oder? Also kann man Object in jeden Typ unwandeln, aber niemals
> umgekehrt?

Warum machst Du ueberhaupt soviele unnoetige casts, die noch dazu das 
Typensystem komplett aushebeln. Vielleicht verraetst Du mir mal, was Du 
ueberhaupt vor hast?

Michael

von Andreas (Gast)


Lesenswert?

Mit deinem "Cast" wandelst du (anders als bei Primitivtypen) keinen Typ 
um. Du sicherst dem Compiler lediglich zu, dass Object obj zur Laufzeit 
eine Referenz vom Typ Object zugewiesen wird.
Da aber in Java alle Objekte implizit von Object erben, ist dieser Cast 
wenig sinnvoll.

obj.getClass() liefert immer den am weitesten spezialisierten Typ und 
das ist in diesem Fall Double. -> siehe "Liskovsches 
Substitutionsprinzip"

Grundsätzlich gilt: Man kann Objekte eines Typs nicht in Objekte eines 
anderen via Cast umwandeln!!!

Für weitergehende Fragen zu diese Thematik kann ich dir nur wärmstens 
de.comp.lang.java empfehlen.

Viele Grüße

Andreas

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.