59

可能重复:
您何时使用 Java 的 @Override 注释,为什么?

@Override除了让编译器检查超类是否具有该方法之外,是否有任何理由注释方法?

4

4 回答 4

56

正如您所描述的,@Override 创建了一个编译时检查方法是否被覆盖。这对于确保您在尝试覆盖时没有愚蠢的签名问题非常有用。

例如,我看到了以下错误:

public class Foo {
  private String id;
  public boolean equals(Foo f) { return id.equals(f.id);}
}

此类按编写方式编译,但将 @Override 标记添加到 equals 方法会导致编译错误,因为它不会覆盖 Object 上的 equals 方法。这是一个简单的错误,但即使是经验丰富的开发人员也能逃脱

于 2009-02-18T14:57:08.260 回答
24

它不仅使编译器检查——尽管这足以使它有用;它还记录了开发人员的意图。

例如,如果您重写了一个方法,但没有在类型本身的任何地方使用它,那么稍后访问代码的人可能会想知道它到底为什么在那里。注释解释了它的用途。

于 2009-02-18T14:55:24.817 回答
12

不,你几乎成功了。

@Override告诉编译器你的意图:如果你标记一个方法@Override,你打算覆盖超类(或接口,在 Java 6 中)中的某些内容。一个好的 IDE 将有助于标记任何覆盖没有 的方法的方法@Override,因此两者的结合将有助于确保您正在做您想做的事情。

于 2009-02-18T14:58:00.037 回答
2

不——除了它还提高了可读性(即除了您的 IDE 使用的任何指示符之外,它还可以很容易地发现一个方法覆盖了超类中的声明)

于 2009-02-18T14:56:06.313 回答