什么是@Override在Java中?

可能重复:
你什么时候使用Java的@Override注解,为什么?

除了让编译器检查超类是否有这个方法以外,还有其他的理由用@Override来标注一个方法吗?

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

例如,我看到以下错误:

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

这个类按照书面编译,但将@Override标记添加到equals方法将导致编译错误,因为它不覆盖Object上的equals方法。 这是一个简单的错误,但它可以逃脱一个经验丰富的开发人员的眼睛

它不仅使编译器检查 – 虽然这将足以使其有用; 它也logging了开发者的意图。

例如,如果你重写了一个方法,但是没有从types本身的任何地方使用它,稍后有人来代码可能会奇怪为什么地球上它在那里。 注释解释了它的目的。

不,你几乎是钉上了它。

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

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