Java 为什么“ClassCastException”出现在我的代码中?
为什么这里会发生ClassCastException?您收到的ClassCastException符合: 下面是检查对象的运行时类型R是否与类型T(即在强制转换运算符中指定的类型的擦除)的赋值兼容的算法。如果引发运行时异常,则它是ClassCastException 如果R是普通类而不是数组类: 如果T是类类型,则R必须与T是同一类或T的子类,否则会引发运行时异常 在你的例子中,R是Beta,T是Delta。请注意,Beta不是Delta的子类。您收到的ClassCastException符合: 下面是检查对象的运行时类型R是否与类型T(即在强制转换运算符中指定的类型的擦除)的赋值兼容的算法。如果引发运行时异常,则它是ClassCastException 如果R是普通类而不是数组类: 如果T是类类型,则R必须与T是同一类或T的子类,否则会引发运行时异常 在你的例子中,R是Beta,T是Delta。请注意,Beta不是Delta的子类。您将x转换为Delta,但x是Beta类型,它由Delta扩展,反之亦然。因此,您的ClassCastException 顺便问一下,Gamma发生了什么事?您将x转换为Delta,但x是Beta类型,它由Delta扩展,而不是相反。因此,您的ClassCastExceptionJava 为什么“ClassCastException”出现在我的代码中?,java,Java,为什么这里会发生ClassCastException?您收到的ClassCastException符合: 下面是检查对象的运行时类型R是否与类型T(即在强制转换运算符中指定的类型的擦除)的赋值兼容的算法。如果引发运行时异常,则它是ClassCastException 如果R是普通类而不是数组类: 如果T是类类型,则R必须与T是同一类或T的子类,否则会引发运行时异常 在你的例子中,R是Beta,T是Delta。请注意,Beta不是Delta的子类。您收到的ClassCastException符
顺便问一下,Gamma怎么了?刚刚用简单的英语编写了代码: 福 阿尔法是福 贝塔是阿尔法 德尔塔是贝塔 注: 贝塔不是三角洲 在这里换行
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;
}
}
希望这有帮助。如果您有任何问题,请告诉我。刚刚用简单的英语编写了代码: 福 阿尔法是福 贝塔是阿尔法 德尔塔是贝塔 注: 贝塔不是三角洲 在这里换行
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;
}
}
希望这有帮助。如果您有任何问题,请告诉我。因为不是每只动物都是狗,所以这只是反过来说的。三角形是β,但β不一定是δ。请参阅此处,因为不是每只动物都是狗,所以这只是反过来说的。δ是β,但β不一定是δ。请参阅此处