Javac (any version) compiles the following code without error, but when Main is run it prints &quot;X.Q&quot; instead of &quot;A&lt;T&gt;.X.Q&quot; as required by the language specification.  I think this is really a shortcoming of the specification for circular class declarations, but demonstrating my point is easier if I just start by reporting it as a compiler bug.<br>

<br><div style="margin-left: 40px;"><b><span style="font-family: courier new,monospace;">class A&lt;T&gt; {<br>  static class X {<br>    static class Q {<br>      public static void main() {<br>        System.out.println(&quot;A&lt;T&gt;.X.Q&quot;);<br>

      }<br>    }<br>  }<br>}<br><br>class B extends A&lt;B.Y.Q&gt; {<br>  static class Y extends X { } // X here is inherited from A<br>}<br><br>class X {<br>  static class Q {<br>    public static void main() {<br>      System.out.println(&quot;X.Q&quot;);<br>

    }<br>  }<br>}<br><br>class Main {<br>  public static void main(String[] args) {<br>    B.Y.Q.main();<br>  }<br>}<br></span></b><br style="font-family: courier new,monospace;"></div>