为什么JVM规范声明接口必须有super_class
的java/lang/Object
,即使接口不能扩展java/lang/Object
?接口为什么根据类文件格式扩展Object?
我专门指的是JVM规范,它说的§4.1:
对于接口方面,super_class项的值必须始终是有效的索引到constant_pool表。该索引处的constant_pool条目必须是表示类Object的CONSTANT_Class_info结构。
尚未在JLS的§9.2中,它表示接口不扩展Object。取而代之的是隐式创建抽象方法声明其在Object类中的每个公共方法匹配:
如果接口有没有直接的超级,则接口隐式声明与签名s,返回类型为r的公共抽象成员方法M ,并且抛出与每个公共实例方法m对应的子句t与签名s,返回类型r并抛出在Object中声明的子句t,除非具有相同签名,相同返回类型和兼容throws子句的方法由接口。