我在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);
}
}在编译时它不会给出错误,但在运行时它会显示一个错误: Exception in thread "main“java.lang.ClassCastException: A not be cast to B
发布于 2010-06-22 19:57:35
这是因为new A()的编译时表达式类型是A -这可能是对B实例的引用,因此允许强制转换。
然而,在执行时,引用只是对A的一个实例的引用-因此它无法进行强制转换。just A的实例不是B的实例。仅当引用确实引用B的实例或子类时,强制转换才有效。
发布于 2010-06-22 20:00:13
B扩展了A,因此B可以转换为A。然而,反之亦然。A的实例不能转换为B。
如果你来自Javascript世界,你可能希望它能工作,但是Java没有"duck typing“。
发布于 2015-02-18 08:58:44
首先这样做:
A aClass = new B(); 现在进行显式类型转换,它会起作用的:
B b = (B) aClass;mean的显式类型转换必须需要隐式类型转换。否则,不允许显式强制转换。
https://stackoverflow.com/questions/3092796
复制相似问题