2016-09-29 50 views
-2

如果我有一個內部類在定義某個字段爲「foo」的外部類的上下文中,並且該內部類從另一個類中繼承,該類也具有「 foo「字段,其中foo在內部類中是可見的?對外部變量和繼承變量的陰影優先順序

這裏是一個例子。哪個x被訪問?

class OuterClass { 
    int x; 
    class NestedClass extends OtherClass { 
     int y = x /* which x is accessed here */ 
    } 
} 


class OtherClass { 
    int x; 
} 
+0

當你嘗試它時,它是哪一個? –

+0

我很抱歉,我正在開發基於多個其他語言的語言,所以我無法嘗試使用Java。對於其他人(例如python和Lisp,似乎詞彙會隱藏繼承的詞彙)。我在嘗試在堆棧溢出的任何地方嘗試查找此問題的答案之前花了相當多的時間。 –

回答

2

作爲這裏說的:https://docs.oracle.com/javase/tutorial/java/javaOO/nested.html

如果一個類型(例如作爲成員變量或參數 名)在一個特定的範圍(的聲明,例如內類或方法 定義)與封裝的 作用域中的另一個聲明具有相同的名稱,則聲明會隱藏封閉的 作用域的聲明。

因此,父類的變量將是可見的。你可以嘗試親自看看是這樣。

作爲一個額外的信息,如果你想訪問外部類的變量,你可以使用OuterClassName.this.foo這樣做。

+0

謝謝,但我不認爲我的問題很清楚。我知道如何避免內部和外部類之間的陰影。爲了清晰起見,我重寫了這個問題,看看它是否有意義。謝謝。 –

+0

答案在報價後的第一句。父母的變量將是可見的。編輯我的答案,使其脫穎而出。 – uoyilmaz

+0

當我閱讀該文檔時,它正在比較範圍InnerClass和OuterClass。我不認爲你列出的文檔對我的OtherClass發表任何評論。但也許我沒有正確閱讀它。 –