[英]scjp: class casting rules set
如果子类属于同一层次结构,我们可以将父类降级吗?
例如:
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;
}
}
在这里回答说,只有第12行被注释才能编译代码。 但是,只有在注释了第10行时,代码才会被编译。 请帮忙。
由于Building
不是从Barn
派生的,因此您将收到ClassCastException
。 每当您执行未经检查的下行转换时,都可能发生此异常。
由于Barn
扩展了Building
您需要将Barn
的实例分配给build1
。
Building build1 = new Barn();
Barn barn2 = (Barn) build1;
如文档所述,抛出了类强制转换异常:
抛出该异常以指示代码已尝试将对象强制转换为不是实例的子类。
仅仅因为两个类处于同一类层次结构中,并不意味着我们可以自由地将其转换为层次结构中的任何类型。 我们向下转换的实例必须是我们向下转换的类型。 由于创建的实例的类型为Building
,因此在类型层次结构中的Barn
上方设置了一个级别,因此无法将其强制转换为Barn
。
请看下面的例子
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
}
}
谢谢你好运
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.