A member inner class is defined at the member level of a class (the same level as the methods, instance variables, and constructors). Member inner classes have the following properties:
* Can be declared public, protected, private, or use default access
* Can extend any class and implement any number of interfaces
* Can be abstract
* Can be final
* Can access instance members of enclosing class including private members
* Can not access local variables of enclosing class
* Can not declare static fields or methods
```
public class Main {
private int x = 10;
class B {
private int x = 20;
class C {
private int x = 30;
public void allTheX() {
System.out.println(x); //30
System.out.println(this.x); //30
System.out.println(B.this.x); //20
System.out.println(Main.this.x); //10
}
}
}
public static void main(String[] args) {
Main a = new Main();
Main.B b = a.new B();
Main.B.C c = b.new C();
c.allTheX();
}
}
```