在子类Compilation Error:CloneNotSupportedException的无法访问的catch块

时间:2016-05-09 07:23:47

标签: java exception override

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不会显示任何错误。

我理解的差距在哪里?

1 个答案:

答案 0 :(得分:4)

如果SuperClass的{​​{1}}捕获clone并且没有抓住它,CloneNotSupportedException就不必抓住它,因为它永远不会被它抛出尝试阻止SubClass的{​​{1}}。

当您从SubClass移除clone()时,clone()现在调用SuperClass的{​​{1}},其中包含SubClass子句。因此,您必须捕获该异常(或向您的方法添加Object)。