Поскольку
B
не является статичным, он необходим экземпляр
A
, чтобы иметь возможность существовать, таким образом, ошибка.
Если
B
является статическим, ошибка уходит.
Ах, забудьте о ерунде. Это bug, и он работает на ideone в режиме Java7. Тем не менее, до Java 7 не работает - see this question, и вам необходимо либо
Изменение B статического
Добавить конструктор
C() {
A.this.super();
}
А потом его будем работать.
Причина, почему это происходит, прежде чем Java 7 может быть следующее что из JLS:
Let C be the class being instantiated, let S be the direct superclass of C, and let i be the instance being created.
неявной super
вызывается непосредственно вмещающих экземпляр I относительно S.
В earlier JLS, экземпляр немедленно ограждающий определяются как
Let O be the innermost lexically enclosing class of which S is a member, and let n be an integer such that O is the nth lexically enclosing class of C. The immediately enclosing instance of i with respect to S is the nth lexically enclosing instance of this.
Однако в Java 7:
Let O be the innermost lexically enclosing class of S, and let n be an integer such that O is the n'th lexically enclosing class of C.
The immediately enclosing instance of i with respect to S is the n'th lexically enclosing instance of this.
Таким образом, в прошлом это было сокровенным лексический объемлющий классом из которых S является член, а теперь это самый внутренний лексически охватывающий класс S, поэтому он изменился с C
до A
, поэтому код работает на Java 7.
Пожалуйста, забудьте про весь вздор - это ошибка. В этом случае Джавак отлично работает. Я отредактировал свой ответ. https://bugs.eclipse.org/bugs/show_bug.cgi?id=373371 –
@ ZiyaoWei Это также не работает в IntelliJ – arshajii
Javac 7 должен работать, а если нет, добавление конструктора поможет. –