Java 8默认方法接口覆盖Object equals方法

19
public interface Table<T> {

    @Overrride
    default boolean equals(Object other) {
        //do something and return true/false
    }
}
为什么上面的代码会出现“java:默认接口Table中的equals方法覆盖了java.lang.Object的一个成员”的编译错误?我们不能使用接口默认方法来覆盖hashCode和equals方法吗?假设我在同一个接口中有方法来确定实现该接口的对象的相等性。
1个回答

19

没有实现的类总是胜过默认方法,因此具有默认hashCodeequals永远不会被调用,因此被禁止。


7
不仅实现方式能够胜出默认方法。在非“接口”类中(即在超类层次结构内),任何声明都会胜出,即使它被声明为abstract - Holger
同意 Holger 的观点,这是一个 bug。如果我知道我有接口方法和合理的 toString 默认实现,并调用这些方法是可能的,那么我应该被允许在接口中声明它。不确定如果多个接口声明默认实现会发生什么,现在会发生什么? - ggb667

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接