Creating Inner Classes Instances
Non-static inner classes have a hidden reference to the enclosing class instance. This means you must have an instance of the enclosing class to create the inner class. You also have to use a special "new" function that correctly initializes the hidden reference to the enclosing class. The special "new" function is a member of the enclosing class.
public class InnerClassTest { public class ReallyInner { } }
InnerClassTest o = new InnerClassTest(); InnerClassTest.ReallyInner i = o.new ReallyInner();or
InnerClassTest.ReallyInner i = new InnerClassTest().new ReallyInner();
Example:
public class InnerClassTest { public void foo() { System.out.println("Outer class"); } public class ReallyInner { public void foo() { System.out.println("Inner class"); } public void test() { this.foo(); InnerClassTest.this.foo(); } } public static void main(String[] args) { InnerClassTest.ReallyInner i = new InnerClassTest().new ReallyInner(); i.test(); } }Output:
Inner class Outer class