At subclass Compilation Error: Unreachable catch block for CloneNotSupportedException

At subclass Compilation Error: Unreachable catch block for CloneNotSupportedException

SuperClass中,当我覆盖clone()方法时就没有问题了。

public class SuperClass implements Serializable, Cloneable {
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}

当我通过完全相同的方式覆盖 SubClass 中的 clone() 方法时(复制和粘贴 clone() 来自 super [=35 的方法=]) 它显示编译错误

public class SubClass extends SuperClass implements Serializable, Cloneable {
    public Object clone() {
        try {
            return super.clone();
        } catch (CloneNotSupportedException e) {
            return null;
        }
    }
}

SubClasss 中包含 catch 的行出现编译错误:

Unreachable catch block for CloneNotSupportedException. This exception is never thrown from the try statement body

同样,如果我从 SuperClass 中删除方法 clone(),那么 SubClass 将不会显示任何错误。

我理解的差距在哪里?

如果 SuperClassclone 抓住了 CloneNotSupportedException 但没有抛出它, SubClass 就不必抓住它,因为它永远不会被抛出通过 SubClassclone().

的 try 块

当您从 SuperClass 中删除 clone() 时,SubClass 现在会调用 Objectclone(),它有一个 throws CloneNotSupportedException 子句。因此,您必须捕获该异常(或向您的方法添加 throws CloneNotSupportedException)。