2013-08-05 133 views
0

嘿傢伙我是一個總的Java新手,說實話,我不知道如何向你解釋我的問題。繼承靜態最終 - >不可見

所以我有2個類,其中一個是由另一個繼承。

現在我不允許改變超類,否則這會容易得多。

的問題是,在我的子類,我要訪問一個變量(讓我們稱它爲VARIABLE1)

這個變量定義就像在如下:

static final String variable1 = (String)AccessController.doPrivileged(new PrivilegedAction() 
{ 
    public Object run() { 
     return System.getProperty("variable1", "\n"); 
    } 
} 
); 

現在在我的子類我嘗試以下操作:

this.finalOutputFormat = (replaceKeys(this.format) + variable1); 

但它不起作用b因爲日食不斷告訴我變量1 「不可見」

這幾乎是我得到的唯一的錯誤。

你知道爲什麼變量1對我的子類是不可見的嗎?超類作爲庫被導入,但顯然是在不同的包中。

我希望我對情況的描述不是太混亂,但現在我沒有比這更多的信息。

謝謝。

+1

http://docs.oracle.com/javase/tutorial/java/javaOO /accesscontrol.html – arshajii

+1

如果你的谷歌「Java可見性」,你會發現(可能是第一個結果)這[官方文檔](http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html)。如果您閱讀它,您會注意到只有在同一個類中或同一個包中才能訪問具有「無可見性修飾符」的變量。 – Pshemo

+0

謝謝,非常感謝幫助。 – user2653335

回答

4

variable1沒有可見度關鍵字(公共,私人,受保護)。因此,它只能從同一包中的類訪問。

如果您不允許修改超類,唯一的選擇是將您的類放入與超類相同的包中。

+1

答案中的「_and subclasses_」部分似乎是錯誤的。請參閱問題下方評論中的鏈接。 – jlordo

+0

已檢查。你是對的,謝謝。我編輯過。 –

+0

謝謝,非常感謝幫助。 – user2653335

0

,如果你想使用它像這樣,把公共修飾符變量1之前或移動的子類同一個包超類