Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
826 views
in Technique[技术] by (71.8m points)

inheritance - Can't not downcast in java at runtime

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

  class Animal{}
  class Dog extend Animal{}

And the main class:

   class Test{
       public static void main(String[] args){
           Animal a= new Animal();
           Dog dog = (Dog)a;
       }
   }

error is show:

Exception in thread "main" java.lang.ClassCastException: com.example.Animal cannot be cast to com.example.Dog
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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;
  }

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...