实现接口方法的方法应该用@Override进行注释吗?
Override注释的javadoc说:
指示方法声明要重写超类中的方法声明。如果使用此注释类型注释了方法,但没有重写超类方法,则需要编译器生成错误消息。
我不认为接口在技术上是超类。真的是这样吗?
问题阐述
实现接口方法的方法应该用@Override进行注释吗?
Override注释的javadoc说:
指示方法声明要重写超类中的方法声明。如果使用此注释类型注释了方法,但没有重写超类方法,则需要编译器生成错误消息。
我不认为接口在技术上是超类。真的是这样吗?
问题阐述
当前回答
重写从您自己的类继承的方法通常不会破坏使用ide进行重构。但是如果您重写从库继承的方法,建议使用它。如果你不这样做,你通常不会在以后的库更改中得到错误,而是一个隐藏得很好的bug。
其他回答
你应该尽可能使用@Override。它可以防止犯简单的错误。例子:
class C {
@Override
public boolean equals(SomeClass obj){
// code ...
}
}
这不能编译,因为它没有正确地覆盖公共布尔值= (Object obj)。
对于实现接口(仅限1.6及以上版本)或重写超类方法的方法也是如此。
JDK 5.0不允许你在实现interface中声明的方法时使用@Override注释(它的编译错误),但JDK 6.0允许。所以你可以根据自己的需求来设置你的项目偏好。
如果实现接口的类是一个抽象类,@Override用于确保实现是针对接口方法的;如果没有@Override,即使实现方法签名与接口中声明的方法不匹配,抽象类也可以很好地编译;不匹配的接口方法将保持未实现。 @Zhao引用的Java文档
该方法重写或实现在超类型中声明的方法
显然引用了一个抽象超类;接口不能称为超类型。 因此,@Override是冗余的,对于具体类中的接口方法实现并不合理。
我会利用一切机会。你什么时候使用Java的@Override注释,为什么?
在java 6及更高版本中,可以使用@Override来实现接口的方法。
但是,我不认为这是有意义的:覆盖意味着你在超类中有一个方法,而你在子类中实现它。
如果你正在实现一个接口,我认为我们应该使用@ implementation或其他东西,而不是@Override。