爲什麼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子句的方法由接口。