気になるのは2点目です。
「this」ポインターが静的ではないため、内部クラスがアクセスできないという事実に関係している可能性があると思いました。それが正しい説明かどうかはわかりませんが。
これはまた、「「this」ポインターはどこで定義されているのか」という別の質問を提起しました。
気になるのは2点目です。
「this」ポインターが静的ではないため、内部クラスがアクセスできないという事実に関係している可能性があると思いました。それが正しい説明かどうかはわかりませんが。
これはまた、「「this」ポインターはどこで定義されているのか」という別の質問を提起しました。
内部クラスが であるstatic
場合、外部クラスのインスタンスを囲むことなくインスタンス化できます。非static
内部クラスの場合、インスタンス化には外部クラスのインスタンスが必要です。たとえば、クラス構造が次の場合:
public class A {
public static class B {
}
public class C {
}
}
次にインスタンス化するには、次のようにする必要がB
あります。C
// simply
A.B b = new A.B();
// however
A.C c = new A().new C();
非static
内部クラスがインスタンス化されるとき、バックグラウンドで、外側のクラスのインスタンスがコンストラクターに渡されます。これにより、 のインスタンスにOuterClass.this
アクセスできるようになります。
「舞台裏」のことを確認するには、リフレクションを介して内部クラスの宣言されたコンストラクターと宣言されたフィールドを確認できます。
// prints that there is one field of type A called "this$1"
for (Field f : A.C.class.getDeclaredFields()) {
System.out.println(f);
}
// prints that the constructor takes in one parameter of type A
for (Constructor c : A.C.class.getDeclaredConstructors()) {
System.out.println(c);
}