Kal*_*ain 5 java dynamic-cast casting classcastexception
我在java中有两个类:
class A {
int a=10;
public void sayhello() {
System.out.println("class A");
}
}
class B extends A {
int a=20;
public void sayhello() {
System.out.println("class B");
}
}
public class HelloWorld {
public static void main(String[] args) throws IOException {
B b = (B) new A();
System.out.println(b.a);
}
}
Run Code Online (Sandbox Code Playgroud)
在编译时它不会给出错误,但在运行时它会显示错误:线程"main"中的异常java.lang.ClassCastException:A无法转换为B
Jon*_*eet 16
发生这种情况是因为编译时表达式类型new A()是A- 可以是对实例的引用B,因此允许转换.
但是,在执行时,引用只是一个实例A- 因此它无法进行转换.just 的实例A 不是.的实例B.只有在引用确实引用实例B或子类时,转换才有效.