java 一道类型转换的题

来源:百度知道 编辑:UC知道 时间:2024/09/23 10:35:56
interface Foo{}
class Alpha implements Foo{}
class Beta extends Alpha{}
class Delta extends Beta{
public static void main(String[] args){
Beta x = new Beta();
//insert code here
}
}
为什么在注释的地方写: Foo f = (Delta)x;会出错?

问题出在(Delta)x这里;子类对象中包含父类对象的所有内容,当定义一个子类对象,并将其赋给一个父类对象是,就是将子类对象的范围压缩在父类对象的范围里面,这是你可以强制类型转换,将范围重新扩展,变成子类对象的范围
例子:
Bate b= new Text();//子类对象的范围压缩在父类对象的范围里面
Text c = (Text)b;//将范围重新扩展
而你定义的是父类对象(new的就是父类),已经是最大范围了,你怎么扩展成子类对象呢?

先将向上转为父类,再将这个父类向下转为子类,可以
直接将父类转为子类,不可以

Delta 继承 Beta 那么Beta 是父类, Delta 是Beta 的子类
对象x是父类的
将x转换为子类类型?你说可以嘛?

应该是可以编译通过的吧

哎,

书到用时方恨少,
纸上得来终觉浅

可以呀,我写的就可以,可能你写的程序那错了吧?