什么是Java中的@Override?

use*_*374 58 java overriding

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

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

Rob*_*rco 51

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

例如,我看到以下错误:

public class Foo {
  private String id;
  public boolean equals(Foo f) { return id.equals(f.id);}
}
Run Code Online (Sandbox Code Playgroud)

此类编译为已编写,但将@Override标记添加到equals方法将导致编译错误,因为它不会覆盖Object上的equals方法.这是一个简单的错误,但它甚至可以逃避经验丰富的开发人员的眼球


Jon*_*eet 23

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

例如,如果你覆盖一个方法但不在类型本身的任何地方使用它,那么稍后有人会在这里找到它的原因.注释解释了其目的.

  • 当你回答这个问题时,我想知道你的声望点是什么. (3认同)

Mic*_*ers 11

不,你几乎钉了它.

@Override告诉编译器你的意图:如果你标记一个方法@Override,你打算覆盖超类(或接口,在Java 6中)的东西.一个好的IDE将有助于标记任何覆盖方法的方法@Override,因此两者的结合将有助于确保您正在做您正在尝试的方法.