How nested class works ?

How to : Nested Class

Consider the following - When we compile the above program, it will be compiled into two classes : Outer.class and Outer$Inner.class

public class Outer {
    class Inner {
    }
}

If we consider the anonymous inner classes inside the Outer class then -

interface InnerInterface {
}
public class Outer {
    InnerInterface w1 = new InnerInterface() {
    };
}

Above class will be compiled into two classes : Outer.class and Outer$1.class

Sample Example :

Consider the following class -

class Outer {
     private int value = 9;
     class Inner {
         int getValue() {
            return value;
         }
    }
}

Above program after compilation will be converted to -

class Outer {
     private int value = 9;
     Outer() {
	 }
	 // added by the compiler
     static int access$0(Outer o1) {
         return o1.value;
     }
}
class Outer$Inner {
     final Outer this$0;
     Outer$Inner(Outer o1) {
         super();
         this$0 = o1;
     }
     int getValue() {
        // modified by the compiler
        return Outer.access$0(this$0);
     }
}