我们应该@Override接口的方法实现吗?

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

Override注解的javadoc说:

表示方法声明旨在覆盖超类中的方法声明。 如果一个方法用这个注解types进行了注释,但是没有重写一个超类方法,编译器需要生成一个错误消息。

我不认为一个接口在技术上是一个超类。 还是呢?

问题阐述

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

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

这不会编译,因为它没有正确覆盖public boolean equals(Object obj)

实现一个接口( 仅限于1.6或更高版本 )或重写一个超类的方法的方法也一样。

我相信javac的行为已经发生了变化–1.5它禁止注释,1.6不。 注释提供了一个额外的编译时检查,所以如果你使用1.6我会去的。

如果可用,您应该总是使用@Override注释方法。

在JDK 5中,这意味着覆盖超类的方法,在JDK 6和7中,它意味着覆盖超类的方法,并实现接口的方法。 原因如前所述,它允许编译器在你认为你重写(或实现)一个方法的地方发现错误,但实际上是定义一个新的方法(不同的签名)。

这个equals(Object)equals(YourObject)例子是一个标准的例子,但是对于接口的实现可以使用相同的参数。

我想可能是因为它没有强制性的注解接口的实现方法,JDK 5把这个标记为编译错误。 如果JDK 6强制执行此注释,则会打破向后兼容性。

我不是Eclipse用户,但在其他IDE(IntelliJ)中,只有在项目设置为JDK 6 +项目时,才会在实现接口方法时添加@Override注释。 我会想象Eclipse是相似的。

但是,我希望看到这种用法的不同注释,也许是@Implements注释。

我会利用每一个机会。 请参阅何时使用Java的@Override注释,为什么?

如果要实现在接口(其编译错误)中声明的方法,JDK 5.0不允许使用@Override注释,但是JDK 6.0允许。 所以可能你可以根据你的要求configuration你的项目偏好。

覆盖你自己的类inheritance自己的方法通常不会打破重构使用ide。 但是,如果您重写从库中inheritance的方法,则build议使用它。 如果你不这样做,你会经常在后来的图书馆更换中得到任何错误,但是一个隐藏的错误。

这不是JDK的问题。 在Eclipse Helios中,它允许对所实现的接口方法使用@Override注解,无论是JDK 5还是6.对于Eclipse Galileo,@Override注释是不允许的,无论是JDK 5还是6。

对我来说,这是一些代码需要Java 6编译的唯一原因。 不知道这是否值得。

如果一个具体类没有重写一个抽象方法,那么使用@Override实现是一个开放的问题,因为编译器总是会警告你任何未实现的方法。 在这些情况下,可能会有一个说法,认为它会降低可读性 – 读取代码的内容更多,而在较小的程度上,它被称为@Implement而不是@Implement

包含@Override的问题是,它让你觉得你忘记了调用super.theOverridenMethod()方法,这是非常混乱的 。 这应该是清晰的。 也许Java应该提供一个在这里使用的@Interface 。 哦,还有另外一半的Java特性…

当Eclipse创build一个实现接口的类时,它会自动添加@Override注解来“生成未实现的方法”。

在Java 6及更高版本中,可以使用@Override作为实现接口的方法。

但是,我不认为这是有道理的:覆盖意味着你在超类中有一个方法,并且你在子类中实现它。

如果你正在实现一个接口,我认为我们应该使用@Implement或其他的东西,而不是@Override