clone()具有受保护的访问权限 – 公共对象clone()

我正在编写代码来创建一个对象,克隆该对象,然后比较两者。

有问题的对象Octagon是对象GeometricObject的扩展

public class Octagon extends GeometricObject implements Comparable, 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中重命名克隆方法,比如说克隆,但是后来我得到了错误:

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

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

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

编辑:我需要使用克隆。 我知道普遍的共识是克隆被禁止。

更换

 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 ); }