2016-05-09 3 views
1

In SuperClass, wenn ich clone() Methode überschreiben, dann gibt es kein Problem.Bei Unterklasse Kompilierungsfehler: Nicht erreichbare catch block für CloneNotSupportedException

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

Als ich clone() Methode in meinem SubClass überschreiben, indem genau gleiche tun (Kopieren und einfügenclone() Methode von Superklasse) es Kompilierungsfehler zeigt

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

Compilation Fehler in SubClasss bei der Zeile mit catch:

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

Wenn ich die Methode clone() von SuperClass entferne, dann wird SubClass keinen Fehler anzeigen.

Wo ist die Lücke meines Verständnisses?

Antwort

4

Wenn SuperClass ‚s clone Fänge CloneNotSupportedException und es nicht werfen, SubClass muss es nicht fangen, da sie nie durch den try-Block von SubClass geworfen werden‘ clone() s.

Wenn Sie clone() von SuperClass entfernen, ruft SubClass jetzt Object ‚s clone(), die eine throws CloneNotSupportedException Klausel hat. Daher müssen Sie diese Ausnahme abfangen (oder eine throws CloneNotSupportedException zu Ihrer Methode hinzufügen).

+0

Danke ** Eran **. Jetzt fühle ich mich schämen, dass ich nur mit '' super'' Schlüsselwort und ** Compile-Time Exception ** verwechselt habe. – mmuzahid

+0

Manchmal passiert es. Wir werden schnell unsere einfachen Fehler erkennen. –