首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遗传中的ArrayStoreException

遗传中的ArrayStoreException
EN

Stack Overflow用户
提问于 2014-01-01 10:59:58
回答 4查看 5.5K关注 0票数 4

当我遇到这样的问题时,我正在处理继承问题。我的代码如下

代码语言:javascript
复制
   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();
    }
  }

堆栈跟踪是

代码语言:javascript
复制
Exception in thread "main" java.lang.ArrayStoreException: com.test.Parent
    at com.test.MainTest.main(MainTest.java:10)

当我调试检查c时,我收到消息如下

代码语言:javascript
复制
org.eclipse.debug.core.DebugException: com.sun.jdi.ClassNotLoadedException: Type has not been loaded occurred while retrieving component type of array.

请帮我弄清楚问题出在哪里。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-01 11:02:52

当你这样做的时候

代码语言:javascript
复制
    Child[] c = new Child[10];
    Parent[] p = c;

您正在告诉编译器,p只是一个父数组。但是,还有一个运行时检查,即数组仍然必须包含Child引用。正是这个运行时检查失败了。

票数 2
EN

Stack Overflow用户

发布于 2014-01-01 11:02:33

请参阅ArrayStoreException

引发,以指示已尝试将错误类型的对象存储到对象数组中。例如,下面的代码生成一个ArrayStoreException: 对象x[] =新String3;x=新整数(0);

这正是你想要做的。这是不对的。你得到的是异常:

代码语言:javascript
复制
p[0] =  new Parent();

在这里,您试图将一个p实例分配给Parent,尽管它必须包含根据您以前所做的分配的Child

它就是,与官方文档中所示的示例完全一样,ParentObjectChildInteger

票数 2
EN

Stack Overflow用户

发布于 2014-01-01 11:02:46

从医生那里

引发,以指示已尝试将错误类型的对象存储到对象数组中。例如,下面的代码生成一个ArrayStoreException:

代码语言:javascript
复制
 Object x[] = new String[3];
 x[0] = new Integer(0);

这就是在Parent[] p = c;发生的事情

您应该如何考虑使用接口:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20867934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档