Object类型的方法clone()不可见

  • 本文关键字:clone 类型 方法 Object clone
  • 更新时间 :
  • 英文 :


对于我的生命,我不知道这段代码有什么问题,请帮助。我有三个类,GeometricObject,扩展了GeometricObject的Octagon和用于测试Octagon类的TestOctagon。当我运行testagon类时,我得到这个错误:

Object类型的clone()方法不可见

下面是我的代码:
public abstract class GeometricObject {
    private String color = "white";
    private boolean filled;

    protected GeometricObject() {
    }
    protected GeometricObject(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
    }
    public String getColor() {
        return color;
    }
    public void setColor(String color) {
        this.color = color;
    }
    public boolean isFilled() {
        return filled;
    }
    public void setFilled(boolean filled) {
        this.filled = filled;
    }
    public abstract double getArea();
    public abstract double getPerimeter();
}

import java.lang.Comparable;
import java.lang.Cloneable;
public class Octagon extends GeometricObject implements Comparable<Octagon>, Cloneable{
    double side;    
    public Octagon() {
    }
    public Octagon(double side) {
    this.side = side;
    }
    public Octagon(double side, String color, boolean filled) {
        this.side = side;
        setColor(color);
        setFilled(filled);
    }
    public double getSide() {
        return side;
    }
    public void setSide(double side) {
        this.side = side;
    }
    public double getArea() {
        return (2+4/Math.sqrt(2))*side*side;
    }
    public double getPerimeter() {
        return 8*side;
    }
    @Override
    public int compareTo(Octagon o) {
        if (getArea() > o.getArea())
            return 1;
        else if (getArea() < o.getArea())
            return -1;
        else
            return 0;
    }
    @Override
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

public class TestOctagon {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        GeometricObject oc1 = new Octagon(5);
        System.out.println(oc1.getArea());
        System.out.println(oc1.getPerimeter());
        GeometricObject oc2 = (GeometricObject)oc1.clone();
    }
}

唐,请注意,Object::clone()方法的访问说明符是受保护的。它不能从你的TestOctagon类访问,因为你在类型为GeometriObject (oc1)的对象上调用这个方法,其中克隆方法仍然受到保护,因为它或它的超类都没有覆盖它。尝试将克隆方法从Octagon类移动到GeometriObject类。请保留公共访问说明符。关于如何做到这一点,请参考这个示例http://www.javatpoint.com/object-cloning

最新更新