实现接口方法的方法是否应带有注释@Override
?
指示方法声明旨在覆盖超类中的方法声明。如果使用此注释类型对方法进行注释但未覆盖超类方法,则要求编译器生成错误消息。
我认为接口从技术上讲不是超类。还是?
实现接口方法的方法是否应带有注释@Override
?
指示方法声明旨在覆盖超类中的方法声明。如果使用此注释类型对方法进行注释但未覆盖超类方法,则要求编译器生成错误消息。
我认为接口从技术上讲不是超类。还是?
Answers:
您应该尽可能使用@Override。它可以防止犯下简单的错误。例:
class C {
@Override
public boolean equals(SomeClass obj){
// code ...
}
}
由于无法正确覆盖,因此无法编译public boolean equals(Object obj)
。
实现接口(仅限1.6及更高版本)或重写Super类的方法的方法也是如此。
我相信javac的行为已经改变-1.5禁止注释,而1.6则没有。批注提供了额外的编译时检查,因此如果您使用1.6,我会去做的。
@Override
如果有可用的方法,则应始终对其进行注释。
在JDK 5中,这意味着重写超类的方法;在JDK 6和7中,这意味着重写超类的方法;以及实现接口的方法。如前所述,其原因是它允许编译器在您认为您覆盖(或实现)方法但实际上定义了新方法(不同签名)的地方捕获错误。
所述equals(Object)
对比equals(YourObject)
例子就是一个标准的情况下,但相同的参数可以用于接口实现制成。
我想像一下,对接口的实现方法进行注释不是强制性的原因是JDK 5将其标记为编译错误。如果JDK 6强制执行此注释,则它将破坏向后兼容性。
我不是Eclipse用户,但是在其他IDE(IntelliJ)中,@Override
如果将项目设置为JDK 6+项目,则仅在实现接口方法时才添加注释。我可以想象Eclipse是类似的。
但是,我更希望看到此用法的其他注释,也许是@Implements
注释。
我将在每一个机会中使用它。请参阅何时使用Java的@Override注释以及为什么?
覆盖从您自己的类继承的自己的方法通常不会在使用ide进行重构时中断。但是,如果覆盖从库继承的方法,则建议使用它。如果您不这样做,则在以后的库更改中通常不会出现任何错误,但是会隐藏好错误。
对我而言,通常这是某些代码需要Java 6进行编译的唯一原因。不确定是否值得。
包含的问题@Override
在于,它使您认为忘记了调用该super.theOverridenMethod()
方法,这非常令人困惑。这应该是清晰的。也许Java应该提供一个@Interface
供此处使用。哦,还有Java的另一半特性。