克隆对象的 instanceof 是什么?

6
如果一个类A公开了Object的clone()方法:
@Override
public Object clone() {
    return super.clone();
}

使用clone()创建的A类实例的instanceof(或getClass())是什么?使用clone()方法创建的B extends A类的实例呢? 编辑
澄清:我之所以问这个问题,是因为即使在编译之前,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 

答案已更新,请查看! - Jitesh Upadhyay
3个回答

3
只要使用Object.clone()并调用super.clone(),它就会与原始对象相同类型,这应该由规范执行。阅读此处的文档。这会打印String,但根据规范是错误的。
public class SomeTest {
    @Override
    protected Object clone() {
        return "";
    }
    public static void main(String[] args) {
        System.out.println(new SomeTest().clone().getClass().getSimpleName());
    }
}

2

它应该是父类的一个实例。但这取决于实现者编写传统的clone方法。

在这方面,以及其他方面,Java中的克隆功能存在很大问题。


2

嗨,你能否将链接的主题概括到你的答案中吗?这将使您的答案更好,并且不依赖于可能随时被删除的外部材料。谢谢! - Ben
这篇帖子已经出现在审核队列中,可能会被标记或删除。请避免仅包含链接的回答。我之前也在你的一些回答下留了评论。请编辑并详细说明或将链接作为评论发布,因为您已经有足够的声望。 - Raghunandan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接