java子类型关系

时间:2013-07-25 23:06:52

标签: java subtype

在阅读Horstmann's book时,我在Java中遇到过关于子类型关系的问题:

S is a subtype of T if: 

S is an array type and T is Cloneable or Serializable

我无法真正理解这应该是什么意思。有人可以帮忙吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

这是一个简单的子类型示例。

Array类型实现CloneableSerializable接口。

但是,这些接口未指定任何方法作为方法合同的一部分。实际上,这些只是标记接口,它们的存在为编译器和类的用户提供了详细信息,而不需要任何功能。

例如:

  

请注意,此接口不包含克隆方法。因此,仅仅通过实现该接口的事实来克隆对象是不可能的。即使反射调用clone方法,也无法保证它会成功。

答案 1 :(得分:0)

我认为导致您混淆的是“可复制”和“可序列化”是英语中的属性,短语“is Cloneable”通常用于表示类实现{{1接口。但是,这里只有 表示接口名称CloneableCloneable,而“is”应理解为“is 完全 / equals ”。也就是说,如果Serializable是接口TCloneable是接口T,那么任何数组类型都是Serializable的子类型。

Tarray type形式的任何类型,其中U[]是任意类型,即非U基元或引用类型(请注意数组类型,即使是基本类型,也是引用类型)。这与类void无关,这是数组类型!

您不能将任何数组分配给实现java.lang.reflect.ArrayCloneable的类的引用变量,而只能分配给的引用变量类型SerializableCloneable。因此,如果你有

Serializable

然后以下是合法的:

int[] a = ...; // primitive array
Object[] b = ...; // reference type array
int[][] c = ...; // reference type array, since int[] is a reference type