Java Downcasting扩展类

时间:2017-04-01 21:53:34

标签: java downcast

为什么这段代码不起作用?当我投射时,我得到了ClassCastExeption 线程" main"中的例外情况java.lang.ClassCastException:A不能转换为B     在HelloWorld.main

public class HelloWorld
{
 public static void main(String[] args)
  {
    B b1 = (B)new A();
    b1.a();
   }
}

public class A
{
  public void a (){
  System.out.println("A.a");
  }
  public void b (){
  System.out.println("A.b");
  }
}

public class B extends A{ 
}

1 个答案:

答案 0 :(得分:3)

无法始终以两种方式完成投射。

如果您正在创建一个Animal,通过调用“new Animal()”,您将创建一个动物对象,但不能将其下载到Dog。因为它不是狗。

然而,当您通过调用“new Dog()”创建一个Dog时,您可以将其向上转换为“Animal”并将其向下转换回“Dog”。

Dog dog = new Dog();         
Animal animal = dog;         //upcasting to Animal
if(animal instanceof Dog){ // testing if the Animal is a Dog       
    Dog dog2 = (Dog) animal; //downcast
}