java: 克隆方法冲突

标签 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
    }
}

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

声明:“错误:clone() 在对象中具有 protected 访问权限”

扩展 A 应该使 B 也可以使用 clone() 吗?如果是这样,那么 i 和 j 的值也应该复制到 l 和 m 吗?这可能吗?

最佳答案

clone()是 protected 方法并使其在子类中可访问,使用 public 访问权限覆盖它。

class A implements Cloneable{
    .....
    @Override
    public Object clone() throws CloneNotSupportedException{
      return super.clone();
    }
}

关于java: 克隆方法冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12541788/

相关文章:

java - 为什么在将通用方法参数转换为特定方法参数时无法转换为类型?

java - 数组的clone()和system.arracopy()在Java中创建两个具有不同引用的数组?

java - 了解当我们在调用和不调用 super.clone 的情况下重写克隆方法时会发生什么?

java - 如何使用 Cloneable 类型作为 Java 泛型类的参数

java - PowerMock:来自父类的 stub 方法

java - 列出 n 路径密码查询的关系名称

jquery - 如何单击克隆标签并将复选框选中属性更改为 false & 单击复选框并删除克隆

java - 使用可怕的克隆成语是克隆未知(子)类型对象的唯一方法吗?

java - TestNG::如何在 TestMethod 中获取 TestSuite 名称?

Django 克隆模型对象与基于类的 createview