Dlaczego specyfikacja JVM stwierdza, że interfejsy muszą mieć super_class
z java/lang/Object
, mimo że interfejsy nie rozszerzają się na java/lang/Object
?Dlaczego interfejsy rozszerzają obiekt, zgodnie z formatem pliku klasy?
mam konkretnie odnoszące się do §4.1 spec JVM, gdzie jest napisane:
Dla interfejsu, wartość przedmiotu super_class zawsze musi być ważny wskaźnik do tablicy constant_pool. Pozycja constant_pool w tym indeksie musi być strukturą CONSTANT_Class_info reprezentującą obiekt klasy.
jeszcze w §9.2 z JLS, mówi, że interfejsy nie rozszerzają Object. Zamiast tego domyślnie tworzony sposób abstrakcyjny deklaruje, który pasuje każdej metody publicznej w klasie Object:
Jeśli interfejs ma bezpośrednie superinterfaces, następnie interfejs niejawnie deklaruje public abstract metoda członek mz podpis s, zwracany typ R i podaje klauzulę t odpowiadającą każdej metodzie publicznej m z podpisem s, typowi powrotu r oraz klauzuli throws t zadeklarowanej w Object, chyba że metoda z tym samym podpisem, tym samym typem zwracania i zgodną klauzulą throws jest jawnie deklarowana przez berło.