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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With