Java 继承中的ArrayStoreException
当我遇到这样的问题时,我正在处理继承。 我的代码如下Java 继承中的ArrayStoreException,java,inheritance,Java,Inheritance,当我遇到这样的问题时,我正在处理继承。 我的代码如下 public class Parent { public void methodParent() { System.out.println("Parent"); } } public class Child extends Parent { public void methodParent() { System.out.println("over
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.
请帮助我了解问题所在。请参阅:
抛出以指示已尝试存储错误的
将对象类型转换为对象数组。例如,以下
代码生成ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);
这正是你想要做的。这是不对的。您将得到以下行中的异常:
p[0] = new Parent();
在这里,您正试图为p
分配一个Parent
的实例,但根据之前的分配,它必须包含Child
它是完全就像官方文档中显示的示例一样,父项
是对象
,子项
是整数
抛出以指示试图将错误类型的对象存储到对象数组中。例如,以下代码生成ArrayStoreException:
Object x[] = new String[3];
x[0] = new Integer(0);
这正是发生在Parent[]p=c代码>
<>你应该如何考虑使用接口:< < /p> 当你这样做< /p>
Child[] c = new Child[10];
Parent[] p = c;
您告诉编译器,p
只是一个父数组。但是,还有一个运行时检查,即数组仍然必须包含Child
引用。正是这个运行时检查失败了 分配给变量“p”的数组的实际类型是Child[]。因此,此数组只能“存储”子对象的实例。您正试图存储此数组的父级,这就是引发“数组存储异常”的原因
将子项[]分配给父项[]的变量类型是可以的,因为子项是父项(根据您的模型)。但是,当涉及到在数组中存储对象时,jvm会在运行时检查数组的实际类型。哦,我的孪生兄弟:)感谢您的宝贵输入,我理解ArrayStoreException,但现在我只是根据你们所有人的代码将父类更新为接口和子实现父类工作正常,但当我调试inspect c时,我收到了如下消息:org.eclipse.debug.core.DebugException:com.sun.jdi.ClassNotLoadedException:Type尚未加载检索时发生数组的组件类型。
请帮助解释运行时发生此错误的原因,并自动解析。org.eclipse.debug.core.DebugException:com.sun.jdi.classnotloadeexception:type尚未加载检索数组的组件类型时发生。为什么调试时会出现此错误??请解释!!!!