[英]Java - Is it possible to subclass an array? And more questions about arrays in Java
这些问题纯粹是出于好奇而被问到的。 我实际上并不需要子类化数组,我只是想弄清楚它们如何在Java中工作。
阵列的Javadoc API在哪里? 我找到了一个'Arrays'类,但该类只包含在Java数组上使用的实用程序,而不是实际的数组类。 这引出了我的下一个问题:
是否有一个实际的数组类,其中所有数组都是子类?
是Object[]
的类的超类String[]
例如)? 我猜这里的答案是否定的。 这些实际的课程和其他课程一样吗?
String[]
是一个与String[][]
不同的类吗? 还是String[][][]
等?
正如标题中所要求的那样,是否有可能对数组类进行子类化(或者对数组类进行子类化?仍然不确定它是如何工作的,因为你可以通过上面的问题来判断)? 我可以创建自己的类,其实例与数组完全相同,除非它们具有更多功能吗?
谢谢。
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
字段。 此外,阵列是可复制的。 如果目标元素类型是源元素类型的超类型,则只能转换数组类型 - 您可以将String[]
为Object[]
但不能反过来。 如果您确定数组中的对象是特定类型,则可以单独转换每个元素。 String[][]
是一个数组String[]
所以它是一个不同的类型String[]
作为其元素是串的阵列,而不是字符串。 您可以创建为数组提供类似功能的类( ArrayList
就是这样),但它们不能与常规数组互换。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.