<div dir="ltr">JLS 6.6.1 says, "Otherwise, the member or constructor is declared private, and access is permitted if and only if it occurs within the body of the top level class (§7.6) that encloses the declaration of the member or constructor."  Under that definition, I believe the following code should be legal:<div><br></div><div><div>class Holder {</div><div>  class Super {</div><div>    private String s1;</div><div>  }</div><div>  class Sub extends Super {</div><div>    private String doIt() {</div><div>      return s1;</div><div>    }</div><div>  }</div><div>}</div></div><div><br></div><div>Holder is the top level class that encloses the declaration of s1, and the "return s1" statement occurs inside Holder's body.  However, javac 1.8.0 issues an error on this code:</div><div><div><br></div><div>Holder.java:7: error: s1 has private access in Holder.Super</div><div>      return s1;</div><div>             ^</div><div>1 error</div></div><div><br></div><div>What am I missing? </div><div><br></div><div>Thanks,</div><div>Eddie</div></div>