web-dev-qa-db-ja.com

内部クラスの外部クラス変数にアクセスする

内部クラスでは、外部クラスの変数にアクセスできますが、メソッドのローカル変数にはアクセスできません。アクセスできないメソッドのローカル変数に関する部分を理解しましたが、外部クラス変数にアクセスできる理由を知りたいですか?

私の理解では、内部クラスは外部クラスとバインドするので、親が利用可能である限り、子はその親変数にアクセスできます。私は正しいですか?

22
kiran

外部クラスがOuterと呼ばれ、内部クラス(非静的)のスコープから_Outer.this.foo_がフィールドに到達するとします。

例えば、

_Outer.this.foo=new ArrayList<>();
_

ここで、Outerはクラスの名前であり、fooはフィールドを識別します。

foo=new Baz()として直接取得することもできますが、シャドウイングによる名前の競合がある場合は、内部フィールドが選択されます。

静的内部クラスの場合は、明示的なインスタンスが必要です。

_outerInstance.foo=new ArrayList<>();
_

または、アクセスするフィールドが静的な場合は、通常どおり次のようにアクセスします。

_Outer.staticFoo=new ArrayList<>();
_
47
nanofarad

Answer:字句スコープのため、Javaの外部クラス変数にアクセスできます。

字句スコープとは

コードが作成される順序で定義されたスコープ。あなたのクラス構造が次のようであるとしましょう

OuterMost  
   --Inner  
     --InnerMost

次に、最も内側のクラスは、最も内側だけでなく最も外側からも変数にアクセスできます。

0
Majeed Siddiqui