Java : Super class array object assigned with sub class array object

标签 java arrays object subclass superclass

我正在尝试将一个子类对象数组分配给它的父类(super class)。程序编译成功,但我收到了 ArrayStoreException。我知道父数组和子数组是对同一个数组的引用,但我不应该至少能够访问方法 func 吗?

class Pclass
{
    Pclass()
    {
        System.out.println("constructor : Parent class");
    }

    public void func()
    { 
        System.out.println("Parent class");
    }
}

class Cclass extends Pclass
{
    Cclass()
    { 
        System.out.println("Constructor : Child class");
    }

    public void func2()
    {  
        System.out.println("It worked");
    }

    public void func()
    { 
        System.out.println("Common");
    }
}

public class test
{     
    public static void main(String ab[])
    {    
        Cclass[] child = new Cclass[10];
        Pclass[] parent = child;
        parent[0]=new Pclass();
        parent[0].func();
    }
}

最佳答案

你不能这样做:

Cclass[] child = new Cclass[10];
Pclass[] parent = child;
parent[0]=new Pclass();

你应该尝试这样做:

Cclass[] child = new Cclass[10];
Pclass[] parent = child;
parent[0]=new Cclass();

那是因为,你首先将 Pclass 数组分配给只能有 Cclass 对象的子引用,然后你试图将 Pclass 对象分配给父引用,这是不允许的!

看,当您编写新的 Cclass 时,您已经在堆上创建了一个 Cclass 对象,尽管 Cclass 对象在数组中为空,但现在它们只接受 Cclass 对象或其子类的对象

所以分配 Pclass 对象是非法的!

获取运行时异常而非编译时的原因:

编译器只检查类是否在相同的继承层次结构中,因为它们在相同的层次结构中你会得到一个运行时异常。

关于Java : Super class array object assigned with sub class array object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27120029/

相关文章:

javascript - 在 Firebase 中管理聊天 channel 的最佳方式

java - 无法让我的对象加载器工作

javascript - 如何使用javascript中reduce函数中的属性值跳过重复对象?

java - 是否可以自动将java代码转换为PHP?

java - Spark从对象的RDD创建Dataframe,列顺序

C++ 骰子滚动分析器(2D 数组)

java - 数组中的不同对象

java - 如何使用映射计算列表中整数列表的总和并获取一个新列表,其中每个条目对应于每个计算出的总和?

java - 如何在Weka的Java库中设置树的数量(setNumTrees不再起作用?)

java - 神经网络和Python