Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why Downcasting throws Exception?

In java:

Base b = new Base();
Derived d = (Derived)b; 

throws ClassCastException. Why? Why downcasting throws Exception here? I could not figure out the reason.

like image 685
mavis Avatar asked Nov 29 '22 08:11

mavis


1 Answers

Let me rename your classes to make things more clear. Base -> Animal. Derived -> Cat.

Just because you're an Animal doesn't mean you're a Cat. You could be a Dog. That's why it's illegal to cast an Animal into a Cat.

On the other hand, is every Cat an Animal? The answer is "yes". That's why you could write code like this:

Animal animal = new Cat();

or

Cat cat = new Cat();
Animal animal = cat;

Also what's worth noting is you can do this:

Animal animal = new Cat();
Cat cat = (Cat) animal;

The reason you can do this is that your animal variable is actually referencing a Cat instance. Therefore you're allowed to cast it back into a variable that references a Cat.

like image 111
Daniel Kaplan Avatar answered Dec 04 '22 16:12

Daniel Kaplan