Java 数组声明如 { A[] aa = new B[10]}

标签 java arrays syntax

今天我写了一个关于数组声明语法的简单测试,所以,有3个类:

public class A {
}

public class B extends A {
}

public class C extends A {
}

我尝试使用下一个语法创建数组

A[] aa = new B[10];

所以,这是可能的,但我们可以只将类 B 的实例添加到此数组中,如果您尝试添加 AC 的实例 你收到 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/

相关文章:

取消引用函数结果的 PHP 语法

java - 枚举 Java 未保存为带有枚举注释的字符串

java - Mockito - 如何对参数是否在另一个函数调用的函数中设置进行单元测试

java - 使用 API KEY 从 google plus 检索 Activity 无效

java - 有这方面的模式吗?对某些子类具有特殊操作的通用基类

javascript - 何时使用包含对象的对象与 JSON 中的对象数组的可接受约定是什么?

java - 我不知道如何在逗号分隔的列表中获取用户输入并将其放入 ArrayList

arrays - Hibernate SQLQuery,如何获取数组和行对象?

mysql - 努力找出关于外键引用的 MySQL create table 语句的语法错误

javascript - JavaScript 中的小数分隔符是什么?