0

假设我有具有可克隆接口和深度覆盖的克隆方法的超类 A。

我也有一个子类B。

B Temp = new B();
B Temp_Clone = (B) Temp.clone();

Temp.clone() 方法返回对克隆的超类 A 的引用,对吗?

据我了解,我不能在子类对象中引用超类,对吧?

那么我在这里写的代码怎么可能呢?因为选角?

谢谢。

4

3 回答 3

0

类 Object 的 clone() 方法创建并返回对象的副本,具有相同的类和具有相同值的所有字段。但是,除非对象是实现标记接口 Cloneable 的类的实例,否则 Object.clone() 会引发 CloneNotSupportedException。

于 2013-04-06T09:12:35.537 回答
0

Temp.clone() 方法返回对克隆的超类 A 的引用,对吗?

正确的。

据我了解,我不能在子类对象中引用超类,对吧?

错误的。

那么我在这里写的代码怎么可能呢?因为选角?

我不知道你认为这是不可能的,但演员肯定是必需的。

于 2013-04-06T09:39:28.507 回答
-1

好吧,如果 A 中的代码调用了 super.clone,那么调用 Temp.clone 时创建的对象是 B 类型的对象。因为 clone 不调用构造函数!在对象类中实现的克隆方法作为本机类和预制成员明智地复制并创建与 this 对象相同的对象。所以 ClonedTemp 来自 B 类型。

于 2013-04-06T10:13:54.223 回答