class A {
static class B {
}
}
A.B ab = new A.B();
class A {
int a;
static class B {
// This will not compile
// int b = a;
}
}
class F {
private F() {}
private int f;
static class G {
F f = new F(); // Can invoke private constructor
int val = f.f; // Can access private field via its own instance
}
}
class A {
private static class B {
public void a(){};
private void b(){};
}
B getB() {
B b = new B();
b.a();
b.b(); // accessing a private method of a static nested class
// No one can do anything with this reference except A itself
return b;
}
}
// This is fine but useless
new A().getB();
// This will not compile
// A.B b = new A().getB();
// This will not compile either
// new A().getB().a();
class A {
class B {
}
}
A.B ab = new A().new B();
class A {
private int a;
private void a() {}
class B {
int b = a;
void b() { a(); }
}
}
class A {
class B {
private int b;
}
int getB() {
return new B().b;
}
}
class A {
class B {
// This is fine:
static final int y = 10;
// This will not compile:
// static int x = 10;
}
}
class A {
void a() {
class B {}
}
}
class A {
void a(int x) {
int y = -1;
class B {
// This is fine
int z = x + y;
}
}
}
interface A {}
class B {
A a = new A(){};
}
interface A {
int a ();
}
class B {
int b = 42;
A a = new A() {
@Override
public int a() {
return b;
}
};
}
interface A {
int a ();
}
class B {
int b = 42;
A a = () -> b;
}
class Foo {
class Bar {
}
static class Qux {
}
Bar fooBar() {
Bar bar;
bar = new Bar();
bar = this.new Bar();
return bar;
}
}
class Baz {
void baz() {
Foo.Bar foobar = new Foo().new Bar();
Foo.Qux qux = new Foo.Qux();
}
}