-1

当我打开Object class源代码时,我可以看到其中的clone()方法。

当我尝试查看clone()方法列表中的方法时没有显示(如果我创建objectasMyClassmyClass应用. dot operator它会给我 Eclipse IDE 中所有可用方法的建议,但它没有clone()在该列表中显示方法!!)

MyClass myClass = new MyClass(); myClass. // here I expect to see clone() as well but not

为什么会发生????

4

3 回答 3

1

如果您考虑Object 类的 Oracle Java 官方文档,您会发现该clone()方法是受保护的,由于多态性,该方法将只能在同一个包或子类中,而不能在其外部。

因此,该方法只能在包中java.lang并且只能在此类的所有子级中,但不能在已声明子级的包中。尝试阅读本主题以提高您对 Java 访问修饰符的理解

但是这里有一个厚点:你可以像这样覆盖这个方法

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

之后你可以clone在声明你的类的同一个包中使用方法MyClass,但要准备好CloneNotSupportedException

您也可以使用自己的实现。只需实现Clonable接口并提供您自己的clone方法。

此外,如果您计划克隆的对象必须等于,您也应该覆盖equals方法。

祝你好运!

于 2015-09-30T07:45:09.993 回答
0

也许您尝试克隆的对象的创建者将克隆方法设为私有。此外,您可能不应该依赖 Eclipse 自动完成功能,尤其是当您刚开始使用 Java 时。

于 2015-09-30T07:43:43.600 回答
0

java.lang.Cloneable 接口必须由类实现

MyClass 实现 Cloneable。

于 2015-09-30T07:45:30.400 回答