Siv*_*iva 6 java arrays subclass object superclass
我正在尝试将子类对象数组分配给它的超类.该程序编译成功,但我得到了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();
}
}
Run Code Online (Sandbox Code Playgroud)
你不能这样做:
Cclass[] child = new Cclass[10];
Pclass[] parent = child;
parent[0]=new Pclass();
Run Code Online (Sandbox Code Playgroud)
你应该尝试这样做:
Cclass[] child = new Cclass[10];
Pclass[] parent = child;
parent[0]=new Cclass();
Run Code Online (Sandbox Code Playgroud)
那是因为,您首先将 Pclass 数组分配给只能有 Cclass 对象的子引用,然后您试图将 Pclass 对象分配给父引用,这是不允许的!
看,发生的情况是,当您编写新的 Cclass 时,您已经在堆上创建了一个 Cclass 对象,尽管 Cclass 对象在数组中为空,但现在它们只接受 Cclass 对象或其子类的对象
所以分配 Pclass 对象是非法的!
获得运行时异常而不是编译时异常的原因:
编译器仅检查这些类是否位于同一继承层次结构中,因为它们位于同一层次结构中,因此您会收到运行时异常。