2016-09-29 7 views
-2

内部クラスがいくつかのフィールド "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についてコメントしているとは思わない。しかし、おそらく私は正しくそれを読んでいない。 –

関連する問題