I don't understand that analogy.
Think of it this way, the inner class if of type
new OuterClass().new InnerClass()
. So if I do this:
OuterClass.InnerClass obj1 = new OuterClass().new InnerClass();
OuterClass.InnerClass obj2 = new OuterClass().new InnerClass();
Then obj1 and obj2 do not point to the same class at all (which is a lie, but perceive it as such). The control belongs to the OuterClass, the OuterClass.InnerClass is considered to be scoped only onto the instance of OuterClass, not to the class OuterClass. By doing this, the obj1 and obj2 cannot talk to each other directly to share the data required within a static member. By creating the class as static, you have effectively created a static member for the OuterClass, so that the variables can be shared just like an enum. By keeping it dynamic and writing final to the static property, it now becomes constant so it cannot be changed by any of the classes.
That make more sense?