2016-08-25 10 views
1

をダウンキャストは、私のサンプルコードです:Javaのクローニングと以下

class One implements Cloneable { 
    @Override 
    public One clone() throws CloneNotSupportedException { 
     One obj = (One) super.clone(); 
     return obj; 
    } 
} 

public class Two extends One { 
    @Override 
    public Two clone() throws CloneNotSupportedException { 
     Two obj1 = (Two) super.clone(); // Line 12 
     return obj1; 
    } 

    public static void main(String[] args) { 
     boolean num = true; 
     try { 
      if ((new Two().clone()) instanceof One) { 
       num = false; 
      } 
     } catch (CloneNotSupportedException e) { 
      System.out.println(e); 
     } 
     System.out.println(num); 
    } 
} 

それは偽出力します。

誰かが行12で何が起きているのか説明できますか? なぜこのダウンキャストは例外をスローしませんか?

+0

なぜそれを投げるべきですか? – tkausl

+2

なぜそれはスローされませんか? *魔法*のため。月がない夜のような黒い魔法。 'clone()'は奇妙な、JVMレベルのものです。 –

答えて

0

4行目です。Object.clone()を呼び出します。その方法はMAGICを行う。既存のインスタンスと同じランタイム・タイプの新しいインスタンスを作成します。