如果子类属于相同的层次结构,我们可以向下转换超类吗?
示例:
class Building { }
public class Barn extends Building {
public static void main(String[] args) {
Building build1 = new Building();
Barn barn1 = new Barn();
//Barn barn2 = (Barn) build1; // line number 10
Object obj1 = (Object) build1;
//String str1 = (String) build1; // line number 12
Building build2 = (Building) barn1;
}
}Answer here声明只有第12行注释会使代码编译。但是,只有在注释了第10行的情况下,代码才会被编译。请帮帮忙。
发布于 2014-02-22 19:36:23
由于Building不是从Barn派生的,因此您将收到一个ClassCastException。当您执行未经检查的向下转换时,任何时候都可能出现此异常。
由于Barn扩展了Building,因此您需要将Barn的一个实例分配给build1。
Building build1 = new Barn();
Barn barn2 = (Barn) build1;正如文档所解释的那样,抛出了一个类类型转换异常:
抛出
以指示代码试图将对象强制转换为该对象不是其实例的子类。
仅仅因为两个类在相同的类层次结构中并不意味着我们可以自由地向下转换为层次结构中的任何类型。我们向下转换的实例必须是我们向下转换到的类型。由于创建的实例的类型为Building,该类型在类型层次结构中比Barn高一级,因此不能将其强制转换为Barn。
发布于 2014-02-22 19:39:50
请参考以下示例
class SuperClass {
...
}
class SubClass extends SuperClass {
...
}
public class Program {
public static void main(String[] args) {
// case 1: actual SuperClass object
SuperClass p1 = new SuperClass();
// case 2: SubClass object is referred by a SuperClass reference
SuperClass p2 = new SubClass();
SubClass s1 = (SubClass)p1; //run time error
SubClass s2 = (SubClass)p2; //OK
}
}谢谢,祝你好运
https://stackoverflow.com/questions/21953705
复制相似问题