【发布时间】:2021-10-22 18:18:54
【问题描述】:
根据The Java Language Specification, Java SE 16 Edition (JLS) §9.2 Interface Members:
如果接口没有直接的超接口类型,则接口隐式声明
public abstract成员方法m,签名s,返回类型r,以及throws子句t对应每个@ 987654330@ 实例方法m带有签名s,返回类型r和throws子句t在Object(§4.3.2) 中声明,除非abstract方法具有相同的签名,相同返回类型,并且接口显式声明了兼容的throws子句。
为什么任何顶级接口“隐式”声明 Object 类的公共方法?这种设计的目的是什么?
【问题讨论】:
-
一切都是
Object。 -
@Mike'Pomax'Kamermans 这不适用于 Java,看看这个答案:stackoverflow.com/a/11844096
-
我知道是这样的,但我还没有找到令人信服的理由让我做出这种选择。我最不喜欢的是没有这样的限制:
Set<? extends InterfactWithHashCodeAndEquals>。您不能在编译时执行此操作,因此您可以将 any 对象传递到集合中。即使他们没有故意覆盖equals/hashCode。或者 任何 对象都可以用作同步器的事实 -
@Eugene 是的,无论好坏。所有编程语言都有怪癖,其中一些比其他语言更基本。但是,请记住:直到 2004 年,Java 中甚至不存在泛型,那时 Java 已经存在了十多年。这是在基础已经牢固且不可撤销地建立十多年后添加到语言中的东西。
标签: java inheritance interface jls