那么equals方法从何而来,接口是否还扩展了超类Object?,如果确实如此,接口如何扩展类?
Java语言规范对此进行了明确的处理。
从第9.2节开始:
如果接口没有直接的超接口,则该接口隐式声明带有签名s的公共抽象成员方法m,返回类型r,并引发与每个带有签名s,返回类型r的公共实例方法m和throws子句t对应的子句t在Object中声明,除非接口明确声明了具有相同签名,相同返回类型和兼容throws子句的方法。
基本上,这样就 可以 使用
equals,
hashCode等等-因为指定Java语言的方式意味着该接口的任何具体实现都 将
是一个类,并且该类最终 必须 是的子类
Object,因此成员肯定是当下。
换句话说,虽然接口本身不扩展
Object,但已知任何实现都可以。
在这里,类A不需要实现方法toString(),因为它存在于Object类中。然后,在集合接口中定义这些方法的目的是什么,因为它们不能强制那里的实现类来实现这些方法。
通常,这样做只是为了清楚起见,例如,根据中声明的成员来记录对实现的期望
Object。



