Java 允许向上转型,但是向下转型会产生编译错误。
可以通过添加强制转换来消除编译错误,但无论如何都会在运行时中断。
在这种情况下,如果不能在运行时执行,为什么 Java 允许向下转换?
这个概念有实际用途吗?
public class demo {
public static void main(String a[]) {
B b = (B) new A(); // compiles with the cast,
// but runtime exception - java.lang.ClassCastException
}
}
class A {
public void draw() {
System.out.println("1");
}
public void draw1() {
System.out.println("2");
}
}
class B extends A {
public void draw() {
System.out.println("3");
}
public void draw2() {
System.out.println("4");
}
}
原文由 Warrior 发布,翻译遵循 CC BY-SA 4.0 许可协议
当有可能在运行时成功时,向下转换是允许的:
在某些情况下,这不会成功:
当强制转换(例如最后一个)在运行时失败时,将抛出
ClassCastException
。在其他情况下它会起作用:
请注意,某些类型转换在编译时将被禁止,因为它们永远不会成功: