ClassCastException异常

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或子类时,转换才有效.


dsm*_*ith 7

B扩展A,因此B可以转换为A.但反之则不然.A的实例不能转换为B.

如果你来自Javascript世界,你可能期望这个工作,但Java没有" 鸭子打字 ".