Can't not downcast in java at runtime

前端 未结 1 603
后悔当初
后悔当初 2021-01-16 01:26

I have a class Animal and a class Dog as following:

  class Animal{}
  class Dog extend Animal{}

And the main class:

   cla         


        
1条回答
  •  生来不讨喜
    2021-01-16 01:59

    An animal could not be a dog can be a cat or something else like in your case an Animal

    Animal a= new Animal(); // a points in heap to Animal object
    Dog dog = (Dog)a; // A dog is an animal but not all animals are  dog
    

    For downcasting you have to do this

    Animal a = new Dog();
    Dog dog = (Dog)a;
    

    By the way, downcasting is dangerous you can have this RuntimeException , if it's for training purpose it's ok.

    If you want to avoid runtime exceptions you can do this check but it'll be a little more slower.

     Animal a = new Dog();
     Dog dog = null;
      if(a instanceof Dog){
        dog = (Dog)a;
      }
    

    0 讨论(0)
提交回复
热议问题