The term "inner class" is a general one, and it definitely does include member classes and local classes (and anonymous classes, which are a form of local class). It may or may not include static member classes (depending on what definition you use), but that's not important in this problem. What is important is that this problem asks about
non-static inner classes. This term obviously excludes static member classes - the question is, does it exclude local classes in static contexts? I think it does, but that's not quite as obvious. Being in a static context is just like being static, except that it's unnecessary (and illegal) to actually
declare that a local class is static. That information is already part of the context where the class is declared. So "non-static" seems like a reasonable shorthand for "not declared static, and not declared in a static context".
I think that the question is probably not intended to
test whether you know about static contexts. (I'm 99% sure they won't be on the exam.) I doubt Paul wants to put in extra words that will only confuse most of the people who read the question. However since the question does say "always" I suppose it would be best to make sure this loophole is completely closed. I can't think of a concise way to do this - perhaps it's better to ask the question a little differently:
<blockquote>An inner class always has free access to all member data of its inclosing (outer) class, provided the inner class is not static or defined in a static context.</blockquote>
Or take out the "always" and the "non-static" and focus on private data:
<blockquote>An inner class can access private member data of its inclosing (outer) class.</blockquote>
This isn't
always true, but the it certainly is true in general.
Note - if the question had meant to exclude
all local classes as Suma suggests, it would (should?) have said
member classes, not
inner classes.