[英]Java overriding method does not recognize variable defined in super
使用Java(對於Android)在繼承中發現一個奇怪的錯誤-我確定自己做錯了什么,但不確定。 我的課程SimonActivity擴展了GameActivity。
在GameActivity中,有一種方法可以設置名為gameVars的Map的值:
protected void setGameOptions(Bundle extras)
{
Map<String, Integer> gameVars = new HashMap<String, Integer>();
String difficulty = extras.getString(DIFFICULTY);
for (TuningVariable t:tuningVars)
{
...
gameVars.put(t.name, varValue);
}
}
現在,我嘗試在SimonActivity中重寫此操作,如下所示:
protected void setGameOptions(Bundle extras)
{
super.setGameOptions(extras);
winPoints = gameVars.get("winPoints");
successBump = gameVars.get("successBump");
}
但是當我編譯時,SimonActivity給了我錯誤“找不到符號變量gameVars”。 SimonActivity中gameVars的實例在Android Studio中以紅色顯示; Studio在GameActivity中告訴我gameVars的內容已更新,但從未查詢過。
顯然,SimonActivity子類中的重寫方法無法從GameActivity超類中識別gameVars變量,即使我已經運行了super。 為什么不? 我應該改變什么?
(我嘗試將SimonActivity中的調用從gameVars更改為super.gameVars,但這並沒有什么不同。)
您應將gameVars
聲明為gameVars
的成員。 您是在方法調用中聲明它,因此一旦您的方法返回,它們將被刪除。 而且據我所知,覆蓋方法無法訪問該覆蓋方法的本地成員。
因為gameVars
是用於方法的局部變量setGameOptions
(和只有它的調用期間存在)。
將其聲明為您的父類的字段 :
protected Map<String, Integer> gameVars = new HashMap<String, Integer>();
protected void setGameOptions(Bundle extras) {
String difficulty = extras.getString(DIFFICULTY);
for (TuningVariable t:tuningVars) {
...
gameVars.put(t.name, varValue);
}
}
gameVar的范圍只是基類中的該方法。
嘗試使其成為類屬性:
public class GameActivity{
protected Map<String, Integer> gameVars = new HashMap<String, Integer>();
///...
}
使gameVars受保護。 因此子類可以使用它。
protected final Map<String, Integer> gameVars = new HashMap<String, Integer>();
您正在使用默認值。
從Java文檔開始-如果類沒有修飾符(默認值,也稱為package-private),則僅在其自己的包中可見(包被命名為相關類的組)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.