public class NonStaticOuterClass { static int outer; StaticInnerClass innerObj; public NonStaticOuterClass(int o) { outer = o; java.util.Random r = new java.util.Random(); innerObj = new StaticInnerClass(r.nextInt(100), r.nextInt(100), r.nextInt(100)); } public String toString() { return "outer: "+outer+" | "+innerObj.toString(); } public static class StaticInnerClass { private int innerPriv; protected int innerProt; public int innerPub; public StaticInnerClass(int innerPriv, int innerProt,int innerPub) { this.innerPriv = innerPriv; this.innerProt = innerProt; this.innerPub = innerPub; } public String toString() { return "innerPriv: "+innerPriv+", innerPub: "+innerPub +", innerProt: "+innerProt; } } public static void main(String args[]) { NonStaticOuterClass myOuter = new NonStaticOuterClass(10); System.out.println(myOuter.innerObj.toString()); StaticInnerClass myInnerObj = new StaticInnerClass(15, 20, 35); System.out.println(myInnerObj); NonStaticOuterClass.StaticInnerClass myInnerObj2 = new NonStaticOuterClass.StaticInnerClass(100, 200, 300); System.out.println(myInnerObj2); } }