Java clone()方法

我阅读了J.Bloch撰写的Effective Java,其中写道:

如果您设计用于继承的类,请注意,如果您选择不提供行为良好的受保护克隆方法,则子类将无法实现Cloneable。

我有A类:

public class A{}

B类扩展了A类:

public class B extends A implements Cloneable {

}

因此,在这种情况下,我无法覆盖clone()方法?如果是,则请解释原因。

回答:

在您的情况下,您可以覆盖clone()

public class A {

}

public class B extends A implements Cloneable {

@Override

public B clone() throws CloneNotSupportedException {

return (B) super.clone();

}

}

而且仍然有一个有效的克隆机制-因此,当您陈述自己时,您就是在说实话implements Cloneable

但是,要兑现这一诺言,所需要做的就是提供A一个private变量。

public class A {

private int a;

}

现在您的诺言被兑现了-除非A实现clone,在这种情况下,您可以使用super.clone()

public class A {

private int a;

@Override

public A clone() throws CloneNotSupportedException {

A newA = (A) super.clone();

newA.a = a;

return newA;

}

}

public class B extends A implements Cloneable {

private int b;

@Override

public B clone() throws CloneNotSupportedException {

B newB = (B) super.clone();

newB.b = b;

return newB;

}

}

从本质上讲-正如Joshua Bloch所说-如果您不实现clone子类,也就不能(通常)。

以上是 Java clone()方法 的全部内容, 来源链接: utcz.com/qa/424388.html

回到顶部