这被认为是一种很好的做法
对覆盖的方法使用 @Override 注释 子类。
但是为什么同样的问题不适用于Java库附带的类。对于例如字符串类。它会覆盖Object类的方法,但不会对这些方法使用 @Override 注释。
这是为了保持与先前版本的Java(如1.4等)的向后兼容性。
由于
答案 0 :(得分:4)
在API中,它对用户(该API)没有太多帮助。但是,当您实施一种方法时,您就打算这样做了。如果覆盖超类的那个,很容易错过方法签名,这应该匹配。
在这种情况下,@Override
在编译时拯救,当覆盖不时,它将失败或发出警告。此外,许多IDE都能识别@Override
,并为您提供足够的支持,以便在编译之前标记和纠正这些情况。
所以@Override
本质上声明了你的意图,即这个方法会覆盖某些东西。只要有效,API的用户就会关心你的意图。
实际上,可能真正的原因是:Retention注释的@Override
设置为SOURCE
。这意味着在编译成类文件时会丢弃@Override
标志。
@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
答案 1 :(得分:2)
@override注释用于提供一些额外的信息,主要是在生成文档时,以及通知开发人员代码打算覆盖超类中的方法。
oracle文档中提到了这一点。
@Override @Override注释通知编译器该元素 用于覆盖超类中声明的元素。重写 方法将在Interfaces and Inheritance中讨论。
//将方法标记为超类方法//已经存在 重写@Override int overriddenMethod(){}
虽然在覆盖a时不需要使用此注释 方法,它有助于防止错误。如果方法标有@Override 无法正确覆盖其超类之一的方法, 编译器生成错误。
请参阅SO本身中的discussion。