| Author |
Problem with ClassCastException
|
Sudhanshu Gupta
Greenhorn
Joined: May 02, 2009
Posts: 23
|
|
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
|
Thanks & Regards
Sudhanshu Gupta
|
 |
Ernest Friedman-Hill
author and iconoclast
Marshal
Joined: Jul 08, 2003
Posts: 24051
|
|
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.
|
[Jess in Action][AskingGoodQuestions]
|
 |
Sudhanshu Gupta
Greenhorn
Joined: May 02, 2009
Posts: 23
|
|
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
|
 |
 |
|
|
subject: Problem with ClassCastException
|
|
|