如果一个 A 类使公共对象的clone()
方法成为:
@Override
public Object clone() {
return super.clone();
}
使用instanceof
创建的 A 实例的getClass()
(或clone()
)是什么?
使用class B extends A
方法创建clone()
的实例怎么样?
修改
澄清:我问这个是因为即使在编译之前,Eclipse java编辑器需要将返回的clone()实例强制转换到指定的对象。这表明返回的类是Object
(技术上是这样,但到目前为止所有的答案都说该类应该是A)
A original = new A();
A cloned1 = original.clone(); // Eclipse marks this as error
A cloned2 = (A) original.clone(); // This is OK
答案 0 :(得分:3)
它与原始对象的类型相同,只要它通过调用Object.clone()
使用super.clone()
并且 应该 来完成convention
阅读doc here。
这会打印String
,但convention:
public class SomeTest {
@Override
protected Object clone() {
return "";
}
public static void main(String[] args) {
System.out.println(new SomeTest().clone().getClass().getSimpleName());
}
}
答案 1 :(得分:2)
应该是父类的实例。但这依赖于实施者编写传统的clone
方法。
在这方面以及其他方面,Java中的克隆已经完全破解了。
答案 2 :(得分:2)
与启动器相同,原始父类通常通过调用super.clone()来使用Object.clone()。如需更多信息,请访问
http://howtodoinjava.com/2012/11/08/a-guide-to-object-cloning-in-java/
https://www.artima.com/objectsandjava/webuscript/ClonCollInner1.html