实现接口方法的方法应该用@Override进行注释吗?

Override注释的javadoc说:

指示方法声明要重写超类中的方法声明。如果使用此注释类型注释了方法,但没有重写超类方法,则需要编译器生成错误消息。

我不认为接口在技术上是超类。真的是这样吗?

问题阐述


当前回答

通过读取java8中的javadoc,你可以在接口Override的声明中找到以下内容:

如果一个方法使用这种注释类型进行注释,编译器就需要生成错误消息,除非至少满足以下条件之一:

该方法重写或实现在超类型中声明的方法。 该方法的签名重写等价于在{@linkplain Object}中声明的任何公共方法的签名。

因此,至少在java8中,应该在接口方法的实现上使用@Override。

其他回答

重写从您自己的类继承的方法通常不会破坏使用ide进行重构。但是如果您重写从库继承的方法,建议使用它。如果你不这样做,你通常不会在以后的库更改中得到错误,而是一个隐藏得很好的bug。

你应该尽可能使用@Override。它可以防止犯简单的错误。例子:

class C {
    @Override
    public boolean equals(SomeClass obj){
        // code ...
    }
}

这不能编译,因为它没有正确地覆盖公共布尔值= (Object obj)。

对于实现接口(仅限1.6及以上版本)或重写超类方法的方法也是如此。

这对JDK来说不是问题。在Eclipse Helios中,它允许对实现的接口方法使用@Override注释,无论使用哪种JDK 5或6。至于Eclipse Galileo,无论JDK 5还是6,都不允许使用@Override注释。

我会利用一切机会。你什么时候使用Java的@Override注释,为什么?

我相信javac的行为已经改变了——在1.5版本中它禁止注释,而在1.6版本中则没有。注释提供了额外的编译时检查,所以如果您使用的是1.6,我会选择它。