member inner class in Java

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();
    }
}
```