当我遇到这样的问题时,我正在处理继承问题。我的代码如下
public class Parent {
public void methodParent() {
System.out.println("Parent");
}
}
public class Child extends Parent {
public void methodParent() {
System.out.println("override method in Child");
}
public void methodChild() {
System.out.println("method in Child");
}
}
public class MainTest {
public static void main(String[] args) {
Child[] c = new Child[10];
Parent[] p = c;
p[0] = new Parent();
c[0].methodParent();
}
}堆栈跟踪是
Exception in thread "main" java.lang.ArrayStoreException: com.test.Parent
at com.test.MainTest.main(MainTest.java:10)当我调试检查c时,我收到消息如下
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.请帮我弄清楚问题出在哪里。
发布于 2014-01-01 11:02:52
当你这样做的时候
Child[] c = new Child[10];
Parent[] p = c;您正在告诉编译器,p只是一个父数组。但是,还有一个运行时检查,即数组仍然必须包含Child引用。正是这个运行时检查失败了。
发布于 2014-01-01 11:02:33
请参阅ArrayStoreException
引发,以指示已尝试将错误类型的对象存储到对象数组中。例如,下面的代码生成一个ArrayStoreException: 对象x[] =新String3;x=新整数(0);
这正是你想要做的。这是不对的。你得到的是异常:
p[0] = new Parent();在这里,您试图将一个p实例分配给Parent,尽管它必须包含根据您以前所做的分配的Child。
它就是,与官方文档中所示的示例完全一样,Parent是Object,Child是Integer。
发布于 2014-01-01 11:02:46
从医生那里
引发,以指示已尝试将错误类型的对象存储到对象数组中。例如,下面的代码生成一个ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);这就是在Parent[] p = c;发生的事情
您应该如何考虑使用接口:)
https://stackoverflow.com/questions/20867934
复制相似问题