equals(Object) 和函数式接口

sil*_*uez 4 java

根据 Java 语言规范(版本 8.0), \xe2\x80\x9c接口不继承自 Object,而是隐式声明许多与 Object 相同的方法。\xe2\x80\x9d 如果您在中提供来自 Object 类的抽象方法接口,它仍然是一个功能接口。

\n\n
@FunctionalInterface\ninterface EqualsInterface {\n    boolean equals(Object obj);\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

编译器给出错误:\xe2\x80\x9c EqualsInterface不是函数式接口:在接口EqualsInterface\xe2\x80\x9d中找不到抽象方法。为什么?\n提前致谢

\n

Pan*_*ara 5

根据Java API

一种信息注释类型,用于指示接口类型声明旨在成为 Java 语言规范定义的函数式接口。从概念上讲,函数式接口只有一个抽象方法。由于默认方法有一个实现,因此它们不是抽象的。如果一个接口声明了一个抽象方法来重写 的公共方法之一 java.lang.Object,那么它也不会计入该接口的抽象方法计数,因为该接口的任何实现都将具有来自java.lang.Object或其他地方的实现。