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