Warum gibt die JVM-Spezifikation an, dass Schnittstellen eine super_class
von java/lang/Object
haben müssen, obwohl die Schnittstellen java/lang/Object
nicht erweitert werden?Warum erweitern Schnittstellen Object, entsprechend dem Klassendateiformat?
Ich beziehe mich speziell auf §4.1 der JVM-Spezifikation, wo es heißt:
für eine Schnittstelle, der Wert des super_class Element muss immer ein gültiger Index in die constant_pool Tabelle sein. Der Eintrag constant_pool an diesem Index muss eine CONSTANT_Class_info-Struktur sein, die das Klassenobjekt darstellt.
noch in §9.2 der JLS, heißt es, dass Schnittstellen Objekt nicht erweitern. Stattdessen wird eine implizit erstellt abstrakte Methode deklariert, die jede öffentliche Methode in der Objektklasse entspricht:
Wenn eine Schnittstelle keinen direkten Superschnitt hat, dann ist die Schnittstelle deklariert implizit ein öffentlicher abstrakter Member-Methode m mit Unterschrift s, Rückgabetyp r und throws clause t entsprechend jeder öffentlichen Instanzmethode m mit Signatur s, Rückgabetyp r und throws - Klausel t deklariert in Object, es sei denn, eine Methode mit derselben Signatur, demselben Rückgabetyp und einer kompatiblen throws - Klausel wird explizit von der deklariert Schnittstelle.