Forums Register Login

Problem with ClassCastException

+Pie Number of slices to send: Send
hi all,
I was taking the self test in SCJP study guide where this code confused me.



This code throws ClassCastException when Tree is downcast to Redwood.
But I dont understand why. To try this out I used an existing code and tried upcasting and downcasting.
I dont understand how come this one is working fine.




Regards

Sudhanshu Gupta
+Pie Number of slices to send: Send
Sorry to say, my friend, but you are mistaken; your example is not working fine. It will compile, yes, but at runtime, the line

NewTest n = (NewTest)t1; //throws no exception

absolutely will throw a ClassCastException. A cast can never actually change an object; it can only tell the compiler something that is true. So the first cast, from a NewTest object to class Test, is OK, because a NewTest is-a Test. But the second cast fails, since the object is really an instance of Test, and can't be converted to NewTet. There's a third thing you can do which does work, and I think that's the interesting case that you're missing:

Test t2 = new NewTest();
NewTest t3 = (NewTest) t2;

You can't make the second assignment without the cast, but with the cast, it's legal, since t2 really does hold a NewTest instance.
+Pie Number of slices to send: Send
hi Ernest Friedman-Hill
thank you very much for clearing my confusion.
Actually I was thinking of collections which return Object instances that can be cast to other types.
The third thing you told about clarified everything.
thank you once again.

Regards

Sudhanshu Gupta
Creativity is allowing yourself to make mistakes; art is knowing which ones to keep. Keep this tiny ad:
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com


reply
reply
This thread has been viewed 802 times.
Similar Threads
A doubt in the type casting
Please help me understanding this
Please explain DownCast Code from K&B
Casting
Down Casting to subtype
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 29, 2024 02:14:11.