Java 扩展的向下转换 class

Java Downcasting of extending class

为什么这段代码不起作用?当我投射时,我得到 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{ 
}

转换不能总是以两种方式完成。

如果您正在创建一个 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
}