Search code examples
javaclasscastexceptiondowncast

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.


Solution

  • 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.