Java – 是否可以子类化数组? 关于Java中的数组的更多问题
这些问题纯粹是出于好奇而被问到的。 我实际上不需要子类化数组,我只是想弄清楚它们如何在Java中工作。
-
arrays的Javadoc API在哪里? 我找到了一个’Arrays’类,但该类只包含在Java数组上使用的实用程序,而不是实际的数组类。 这引出了我的下一个问题:
-
是否有一个实际的数组类,其中所有数组都是子类?
-
Object[]
是Object[]
的超类(例如)吗? 我猜这里的答案是否定的。 这些实际的课程和其他课程一样吗? -
String[]
是否与String[][]
? 还是String[][][]
等? -
正如标题中所要求的那样,是否有可能对数组类进行子类化(或者对数组类进行子类化?仍然不确定它是如何工作的,因为你可以通过上面的问题来判断)? 我可以创建自己的类,其实例与数组完全相同,除非它们具有更多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
就是这样),但它们不能与常规数组互换。