Почему класс не может расширять статический вложенный класс, встречающийся в нем?
Этот класс:
public class OuterChild extends OuterChild.InnerParent {
public static class InnerParent {
}
}
Не в состоянии компилировать:
$ javac OuterChild.java
OuterChild.java:1: error: cyclic inheritance involving OuterChild
public class OuterChild extends OuterChild.InnerParent {
^
1 error
так какOuterChild
будет "зависеть от" себя, потому что§8.1.4 «Суперклассы и подклассы»Спецификация языка Java, Java SE 8 Edition) класс напрямую зависит от любого типа, который "упоминается в [его]extends
или жеimplements
пункт […] в качестве квалификатора в полностью квалифицированной форме имени суперкласса или суперинтерфейса. "
Но я не совсем понимаю мотивацию здесь. Что такое проблемная зависимость? Это просто для согласованности со случаем, когдаInnerParent
были неstatic
(и, следовательно, в итоге получился бы сам по себе лексический экземпляр)?