2012-05-01 53 views
-1

我在做類型強制轉換一個短的研究,以下是我的代碼關於鑄造

interface Foo {} 
class Alpha implements Foo {} 
class Beta extends Alpha {} 

public class Delta extends Beta 
{ 
    public static void main(String[] args) 
{  
     Beta x = new Beta();   
     Alpha a = x; 
      // Foo f = (Alpha)x;// --> commented out 
     Beta b = (Beta)(Alpha)x; 
     Foo f = (Delta)x; // --> complie time error 

    } 

} 

正如它拋出一個運行時錯誤java.lang.ClassCas tException最後聲明指出,請指教,如果我用阿爾法投它,它完美地工作。

回答

4

不能向類型層次結構中比實際對象更深的類型轉換類型的變量。這是因爲有些屬性需要添加到已下達的變量中,並且不清楚它們的值應該是什麼。

但是,在關於劇組的所有檢查中,真正重要的是被引用對象的實際類型,而不是當前聲明的類型。例如,即使您有Alpha a = x;,但仍然可以向下轉換爲Beta,因爲實際實例指向Beta的對象。

1

您不能將Beta降頻爲Delta。 (Beta)對象,然後向下轉換爲Animal(Beta)的子類,例如,一個Dog(三角洲)。這是非法的。