Почему спецификация JVM утверждает, что интерфейсы должны иметь super_class
от java/lang/Object
, даже если интерфейсы не расширяют java/lang/Object
?
Я специально ссылаюсь на §4.1 спецификации JVM, где говорится:
Для интерфейса значение элемента super_class всегда должно быть допустимым индексом в таблице constant_pool. Константа_пустой в этом индексе должна быть структурой CONSTANT_Class_info, представляющей объект класса.
еще в §9.2 JLS, он говорит, что интерфейсы не расширяют Object. Вместо этого объявляется неявно созданный абстрактный метод, который соответствует каждому общедоступному методу в классе Object:
Если интерфейс не имеет прямых суперинтерфейсов, тогда интерфейс неявно объявляет открытый метод абстрактных членов m с сигнатурой s, возвращаемым типом r и предложением th, соответствующим каждому методу публичного экземпляра m с сигнатурой s, типом возврата r и throws, объявленный в Object, если только метод с одной и той же сигнатурой, таким же типом возвращаемого значения и предложение совместимого броска явно объявлено интерфейсом.