比较器接口是否继承Object类?

时间:2011-07-05 13:23:17

标签: java inheritance

我认为可能,因为Comparator接口包含equals方法。

8 个答案:

答案 0 :(得分:8)

来自section 9.2 of the Java Language Specification

  

如果接口没有直接的超接口,那么接口隐式声明一个公共抽象成员方法m,其中包含签名s,返回类型r和throws子句t,对应于具有签名s的每个公共实例方法m,返回类型为r, throws在Object中声明的子句t,除非接口显式声明具有相同签名,相同返回类型和兼容throws子句的方法。如果接口在将对象声明为m的情况下显式声明了这样的方法m,那么这是一个编译时错误。

这允许您通过接口类型的引用调用任何Object方法 - 这是有意义的,因为实现肯定是{{1}的子类}。

编辑:在Object的情况下,为了提供更多文档,Comparator 显式重新声明了。不过,无论如何,您都可以在equals引用上致电equals

答案 1 :(得分:2)

没有接口实现Object类,但实现

答案 2 :(得分:1)

没有接口永远扩展/继承Object。只有它实现的类会隐式扩展Object(如果没有显式扩展)。

Comparator.equals()方法遵循与Object.equals()方法相同的签名。其原因在JavaDoc中说明:

  

但是,覆盖此方法可能,   在某些情况下,通过提高性能   允许程序确定   两个不同的比较器强加了   同样的顺序。

答案 3 :(得分:1)

请参阅以下链接

  

http://www.docjar.com/html/api/java/util/Comparator.java.html

您可以在代码中看到Comparator接口有自己的equals方法。

答案 4 :(得分:1)

在Java中,每个类最终都会扩展Object。虽然您无法实现Comparator本身,但所有比较器实现仍将扩展Object

equals()方法在Comparator中重新声明,以使Javadoc适应Comparatorequals()

施加的特殊合同

答案 5 :(得分:1)

接口类型不是Object的正式子类型,但行为就像它们一样:

  • 他们还隐式声明了Object的所有方法(由Jon引用)
  • 可以通过扩展转换将它们转换为Object,而无需显式转换
  • 接口类型的所有对象都是对象类型
  • 的自动对象

在这种情况下,接口类型以兼容的方式重新声明equals方法,如果实现类没有提供自己的实现,则使用Object的实现。

这里的规范是以Object.equals的默认实现也符合Comparator.equals的规范,并且Comparator.equals的每个(符合)实现也符合Object.equals规范的方式完成的。

答案 6 :(得分:0)

在java中,永远不能通过从类继承接口来创建接口。所以,不,Comparator接口不会继承Object类。

答案 7 :(得分:0)

接口类似于角色其职责声明为接口方法

作为接口的比较器只列出了实现此接口的类需要提供的所有职责。

实现Comparator的类的对象将是Object类的子类。