2016-05-09 5 views
1

SuperClassで、clone()メソッドをオーバーライドすると問題はありません。私はまったく同じことで、私の​​にclone()メソッドをオーバーライド(コピー、スーパークラスからclone()方法を貼り付け)サブクラスでコンパイルエラー:CloneNotSupportedExceptionの到達不能キャッチブロック

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

それはコンパイルエラーに含む行でSubClasss

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

コンパイルエラーを示していますcatch

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

再度、clone()SuperClassから削除すると、​​はエラーを表示しません。

私の理解のギャップはどこですか? SuperClass

答えて

4

場合のclone()さんcloneキャッチCloneNotSupportedExceptionとは、それをスローしません、​​は、それが​​のtryブロックでスローされることはありませんから、それをキャッチする必要がありません "。

あなたはSuperClassからclone()を削除し、​​は今throws CloneNotSupportedException句を持っていObjectclone()を呼び出します。したがって、例外をキャッチする必要があります(またはメソッドにthrows CloneNotSupportedExceptionを追加する必要があります)。

+0

ありがとうございます**エラン**。今私は「スーパー」キーワードと**コンパイル時例外**を混同しているのは残念です。 – mmuzahid

+0

時にはそれが起こります。私たちは簡単な間違いをすぐに認識します。 –

関連する問題