我正在尝试将一个子类对象数组分配给它的父类(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/