Consider this code:
Base.java
package package1;
public class Base<I extends Base.Inner>{
protected static class Inner{}
}
Derived.java
package package2;
public class Derived extends Base<Derived.Inner>{
static class Inner extends Base.Inner{}
}
The base class compiles without problems. The compilation of the derived class fails, the first error being
Derived.java:6: error: Inner has protected access in Base
public static class Inner extends Base.Inner{}
^
I don't see a mistake in the code. Explain this, please. JDK 1.8.0_40
This was a javac bug fixed in version 9.