interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}
class Delta extends Beta {
public static void main( String[] args ) {
Beta x = new Beta();
Foo f=(Delta) x;
}
}
为什么会ClassCastException
出现在这里?
interface Foo {}
class Alpha implements Foo {}
class Beta extends Alpha {}
class Delta extends Beta {
public static void main( String[] args ) {
Beta x = new Beta();
Foo f=(Delta) x;
}
}
为什么会ClassCastException
出现在这里?
刚刚用简单的英语写了你的代码:
富
Alpha IS-A Foo
Beta IS-A阿尔法
Delta IS-A测试版
Beta不是Delta
在这里换行;
Foo f = (Delta) x;
希望这可以帮助。如果您有任何问题,请告诉我。
您收到ClassCastException
符合JLS §5.5.3 的:
这是检查
R
对象的运行时类型是否与类型兼容的算法,该类型T
是强制转换运算符中命名的类型的擦除(第 4.6 节)。如果抛出运行时异常,则为ClassCastException
.如果
R
是普通类(不是数组类):
如果
T
是类类型,则R
必须是与 相同的类(第 4.3.4 节)T
或 的子类T
,否则会引发运行时异常。...
...
在你的情况下,R
isBeta
和T
is Delta
。请注意,Beta
它不是 的子类Delta
。
您正在转换x
为Delta
butx
是 type Beta
,它由Delta
而不是反之亦然扩展。因此,您的ClassCastException
.
顺便问一下,伽玛怎么了?