在SuperClass
中,当我覆盖clone()
方法时,则没有问题。
public class SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
当我通过完全相同(从超类中复制并粘贴 clone()
方法)覆盖SubClass
中的clone()
方法时,它显示编译错误
public class SubClass extends SuperClass implements Serializable, Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
包含SubClasss
的行中catch
的编译错误:
CloneNotSupportedException的无法访问的catch块。永远不会从try语句主体
抛出此异常
同样,如果我从clone()
移除方法SuperClass
,则SubClass
不会显示任何错误。
我理解的差距在哪里?
答案 0 :(得分:4)
如果SuperClass
的{{1}}捕获clone
并且没有抓住它,CloneNotSupportedException
就不必抓住它,因为它永远不会被它抛出尝试阻止SubClass
的{{1}}。
当您从SubClass
移除clone()
时,clone()
现在调用SuperClass
的{{1}},其中包含SubClass
子句。因此,您必须捕获该异常(或向您的方法添加Object
)。