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