java:克隆方法违规

nr5*_*nr5 7 java clone cloneable

代码背后:

class A implements Cloneable
{
    int i, j;

    A(int i, int j)
    {
        this.i = i;
        this.j = j;
    }

    A()
    {
    }
}

class B extends A
{
    int l, m;

    B()
    {
    }

    B(int l, int m)
    {
        this.l = l;
        this.m = m;

    }

    public static void main(String l[])
    {
        A obj = new A(1, 2);
        B obj1 = (B) obj.clone(); // ERROR
    }
}
Run Code Online (Sandbox Code Playgroud)

我知道我违反了克隆的含义,因为我试图将一个对象的字段分配给一个完全不同的对象.但它的错误陈述使我感到困惑.

声明:"错误:clone()在Object中具有受保护的访问权限"

扩展A还应该clone()提供给B吗?如果是这样,那么i和j的值应该复制到l和m吗?这可能吗 ?

ada*_*ost 7

clone()是受保护的方法,并且可以在子类中public访问,可以通过访问来覆盖它.

class A implements Cloneable{
    .....
    @Override
    public Object clone() throws CloneNotSupportedException{
      return super.clone();
    }
}
Run Code Online (Sandbox Code Playgroud)