我观察到clone是Object
类的方法,而Object
是每个类的父类(super class)。在每个类中,我都会将克隆作为重写方法,假设我创建名为 A
的类,如果我没有重写 class A
的 clone
方法code>,并为 A 创建了一个对象,但我无法访问对象中的克隆方法
我在 oop 中缺少什么概念
最佳答案
有两个问题:首先,clone()
是 Object
的 protected
方法,因此只能在对象内部调用它。子类,除非您覆盖它并将其公开。其次,除非您的类实现了Cloneable
,否则调用clone()
将抛出CloneNotSupportedException
。典型的做法是:
class A implements Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}
(您可以消除 try/catch block 并声明您的 clone()
方法来抛出 CloneNotSupportedException
。该方法会更简单,但所有调用代码都必须处理异常。)
由于 Java 允许您在重写方法时缩小返回类型,因此您可以重新定义 clone()
以返回 A
,从而使调用代码不必强制转换:
class A implements Cloneable {
public A clone() {
try {
return (A) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}
关于java - write方法如何与对象的clone方法类似?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20089308/