Oh… First, non-static methods called "instance methods", not "normal". This is the key, by the way. Now, your problem of access has nothing to do with the fact that one class is an inner class of another.
When you say
return InnerField + OuterField;
you really say
return this.InnerField + someInstance.OuterField;
but what is
someInstance
? There is no such thing. The field
OuterField
does not exist without some instance.
You see, what are you asking about has nothing to do with "elegance" or "simplicity". This is about understanding what field you want to read, of what object. And why. Your second sample makes no sense at all; you declare names without types; it won't compile.
Now, there is also such aspect as access modifier. The inner class can access the members of the outer, but the outer class can only access internal or public members of the inner. Again, it has nothing to do with static or instance method. These two aspects of access are orthogonal, independent.
—SA