内部クラスでは、外部クラスの変数にアクセスできますが、メソッドのローカル変数にはアクセスできません。アクセスできないメソッドのローカル変数に関する部分を理解しましたが、外部クラス変数にアクセスできる理由を知りたいですか?
私の理解では、内部クラスは外部クラスとバインドするので、親が利用可能である限り、子はその親変数にアクセスできます。私は正しいですか?
外部クラスがOuter
と呼ばれ、内部クラス(非静的)のスコープから_Outer.this.foo
_がフィールドに到達するとします。
例えば、
_Outer.this.foo=new ArrayList<>();
_
ここで、Outerはクラスの名前であり、foo
はフィールドを識別します。
foo=new Baz()
として直接取得することもできますが、シャドウイングによる名前の競合がある場合は、内部フィールドが選択されます。
静的内部クラスの場合は、明示的なインスタンスが必要です。
_outerInstance.foo=new ArrayList<>();
_
または、アクセスするフィールドが静的な場合は、通常どおり次のようにアクセスします。
_Outer.staticFoo=new ArrayList<>();
_
Answer:字句スコープのため、Javaの外部クラス変数にアクセスできます。
字句スコープとは
コードが作成される順序で定義されたスコープ。あなたのクラス構造が次のようであるとしましょう
OuterMost
--Inner
--InnerMost
次に、最も内側のクラスは、最も内側だけでなく最も外側からも変数にアクセスできます。