我正在编写代码来创建对象,克隆对象,然后比较两者。
有问题的对象Octagon是对象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中重命名克隆方法,比如说克隆,但是我得到了错误:
cannot find symbol
symbol: method cloneme()
location: variable test of type GeometricObject
我觉得问题是因为Octagon扩展了另一个对象,也许?
我真的找不到任何解决方案,而且我花了一个小时阅读所有其他clone()帖子。
编辑:我需要使用克隆。我知道普遍的共识是克隆被禁止了。
答案 0 :(得分:14)
替换
Octagon copy = (Octagon)test.clone();
与
Octagon copy = (Octagon)((Octagon)test).clone();
这样被调用的克隆方法就是你的类。
答案 1 :(得分:9)
您可以编写一个复制构造函数:
public Octagon( Octagon right ){
this.side = right.side;
}
从克隆方法中使用它:
public Object clone() throws CloneNotSupportedException {
return new Octagon( this );
}