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