Java – 是否可以子类化数组? 关于Java中的数组的更多问题

这些问题纯粹是出于好奇而被问到的。 我实际上不需要子类化数组,我只是想弄清楚它们如何在Java中工作。

  1. arrays的Javadoc API在哪里? 我找到了一个’Arrays’类,但该类只包含在Java数组上使用的实用程序,而不是实际的数组类。 这引出了我的下一个问题:

  2. 是否有一个实际的数组类,其中所有数组都是子类?

  3. Object[]Object[]的超类(例如)吗? 我猜这里的答案是否定的。 这些实际的课程和其他课程一样吗?

  4. String[]是否与String[][] ? 还是String[][][]等?

  5. 正如标题中所要求的那样,是否有可能对数组类进行子类化(或者对数组类进行子类化?仍然不确定它是如何工作的,因为你可以通过上面的问题来判断)? 我可以创建自己的类,其实例与数组完全相同,除非它们具有更多function吗?

谢谢。

Java语言规范回答了所有这些问题:

数组类型的直接超类是Object。 每个数组类型都实现了Cloneable和java.io.Serializable接口。

所以不,所有数组都没有通用的基类,因此也没有JavaDoc。 数组的成员由规范定义 。

数组类型之间的子类型在4.10.3节中定义 – 是的, String[]Object[]的子类型。 另请参见ArrayStoreException 。

是的, String[].class != String[][].class 。 (参见第10.8节 )

不,没有语法来子类化数组。 特别是,extends子句必须包含类类型(并且数组类型不是类类型)。

Java中没有数组类。

有趣的是, 数组是对象 (但不是类实例):

对象是类实例或数组。

更多信息: http : //docs.oracle.com/javase/specs/jls/se7/html/jls-10.html

实现java.util.List的类提供了更加面向对象的类数组结构的实现。

您不能子类化数组。 即使与它们一起使用的语法有点不同,它们也是对象(使用JLS检查)。 他们没有太多的API – 除了Object之外( toString()没有做你期望的事情,使用Arrays.deepToString() ; equals()hashCode()是相似的)有length字段。 此外,arrays是可复制的。 如果目标元素类型是源元素类型的超类型,则只能转换数组类型 – 您可以将String[]Object[]但不能反过来。 如果您确定数组中的对象是特定类型,则可以单独转换每个元素。 String[][]String[][]的数组,因此它与String[]类型不同,因为它的元素是String的数组,而不是字符串。 您可以创建为数组提供类似function的类( ArrayList就是这样),但它们不能与常规数组互换。