0

在阅读Horstmann 的书时,我遇到了关于 Java 中子类型关系的问题:

S is a subtype of T if: 

S is an array type and T is Cloneable or Serializable

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

谢谢!

4

2 回答 2

0

我认为引起您困惑的是“可克隆”和“可序列化”是英语中的属性,而短语“是Cloneable”通常用于表示类实现了Cloneable接口。但是,这里它们表示接口名称CloneableSerializable,而“is”应理解为“恰好是/equals”。也就是说,如果TIS 接口CloneableTIS 接口Serializable,则任何数组类型都是 的子类型T

Anarray type是任何形式的类型U[],其中U是任意类型,即非void原始类型或引用类型(请注意,数组类型,即使是原始类型,也是引用类型)。java.lang.reflect.Array这与不是数组类型的类无关!

您不能将任何数组分配给实现Cloneableor的类的引用变量Serializable,而只能分配给完全Cloneable是or类型的引用变量Serializable。因此,如果你有

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

那么以下是合法的:

Cloneable x = a; x = b; x = c;
Serializable y = a; y = b; y = c;
于 2013-07-26T01:46:48.233 回答
0

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

Array类型实现CloneableSerializable接口。

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

例如:

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

于 2013-07-25T23:08:59.993 回答