今天我写了一个关于数组声明语法的简单测试,所以,有3个类:
public class A {
}
public class B extends A {
}
public class C extends A {
}
我尝试使用下一个语法创建数组
A[] aa = new B[10];
所以,这是可能的,但我们可以只将类 B
的实例添加到此数组中,如果您尝试添加 A
或 C 的实例
你收到 java.lang.ArrayStoreException和问题,为什么我们可以使用这样的语法创建数组,它可以在哪里使用并从中获利?
谢谢。
最佳答案
数组包含 Bs 类型。即使引用 aa 可以保存 A[]、B[] 或 C[] 类型的数组(因为 C 和 B 都扩展了 A),在运行时,数组只能保存 Bs 类型的内容。
A 类不是 B。C 类不是 B。因此出现运行时异常。
编辑:
像这样的代码有很多潜在用途。例如,您可以像这样声明一个数组,因为您可能直到运行时才知道您正在使用的更明确的类型。
例如:
Animal[] animals;
if (useDogs) {
animals = new Dog[num];
} else {
animals = new Cat[num];
}
loadIntoCar(animals);
关于Java 数组声明如 { A[] aa = new B[10]},我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494405/