• Post Reply Bookmark Topic Watch Topic
  • New Topic

Problem with ClassCastException  RSS feed

 
Sudhanshu Gupta
Greenhorn
Posts: 23
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
 
Ernest Friedman-Hill
author and iconoclast
Sheriff
Posts: 24215
37
Chrome Eclipse IDE Mac OS X
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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.
 
Sudhanshu Gupta
Greenhorn
Posts: 23
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
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
 
Consider Paul's rocket mass heater.
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!