2011-04-03 58 views
0

爲什麼此代碼不起作用?具體來說,爲什麼在if語句之外完成的類型轉換不在其中。關於if語句在Java中進行類型轉換

private SuperType currObj; 

public void someMethod(SuperType currObj){ 

    if(currObj instanceof aSubType){ 
     currObj = (aSubType) currObj; 
     if (true){ 
      currObj.someMethodofaSubtype(); 
     } 
    } 
} 
+0

你還必須有變量名可以是混亂的一些混合。你可以幫助指定哪個是通過'this'關鍵字。 – jbrookover 2011-04-03 01:38:26

回答

4

該行currObj = (aSubType) currObj實際上沒有任何淨效應。爲了調用someMethodofaSubtype(),編譯器想知道該對象確實是aSubType類型。演員陣容並沒有真正改變基礎對象。投射然後將投射結果存儲爲類型爲aSubType的新變量將會有所斬獲。您可能想要類似於:

aSubType subCurrObj = (aSubType) currObj; 
subCurrObj.someMethodofaSubtype(); 
+0

感謝您的快速反應,這是有道理的! – Jesse 2011-04-03 01:55:45

0

爲了使類型轉換生效,您需要將引用存儲在正確類型的變量中。您已經從SuperType轉換爲aSubType,但是您將結果存儲在SuperType變量中,該變量會自動重新備份。

你想:

aSubType subObject = (aSubType)currObj;