Если внутренний класс равен 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);
}
Imagine с помощью 'TopClass.this' в' static' метода. –