繁体   English   中英

clone() 具有受保护的访问权限 - 公开 Object clone()

[英]clone() has protected access - made public Object clone()

我正在编写代码来创建 object,克隆 object,然后比较两者。

有问题的 object,八边形,是 object GeometricObject 的扩展

public class Octagon extends GeometricObject implements Comparable<Octagon>, Cloneable {
private double side;

public Octagon (double side){
    this.side = side;
}

public Object clone() throws CloneNotSupportedException {
    Octagon octClone = (Octagon)super.clone();
    return octClone;
}

在名为 Octagon.java 的文件中

在另一个,TestOctagon.java,是我的主要方法:

public class TestOctagon {
    public static void main(String[] args) {
        GeometricObject test = new Octagon(5); //create an Octagon with a side of 5
        System.out.println("Area is: "+test.getArea());
        System.out.println("Perimeter is: "+test.getPerimeter());

        Octagon copy = (Octagon)test.clone();


    }
}

错误出现在 main 方法的最后一行。

clone() has protected access in Object

我试过在 Octagaon 中重命名克隆方法,对 cloneme 说,但后来我得到了错误:

cannot find symbol
symbol: method cloneme()
location: variable test of type GeometricObject

我觉得问题是因为 Octagon 扩展了另一个 object,也许?

我真的找不到任何解决方案,我花了一个小时阅读这里的所有其他 clone() 帖子。

编辑:我需要使用克隆。 我知道普遍的共识是克隆是无聊的。

更换

Octagon copy = (Octagon)test.clone();

Octagon copy = (Octagon)((Octagon)test).clone();

这样被调用的克隆方法就是你的一个类。

你可以写一个拷贝构造函数:

public Octagon( Octagon right ){
    this.side = right.side;
}

并从克隆方法中使用它:

public Object clone() throws CloneNotSupportedException {
    return new Octagon( this );
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM