Java – 什么是“@Override”用于?

可能重复:
在java中有什么“@Override”?

到目前为止,我从来没有在方法之前放置“@Override”。 我看到了一些代码示例,但我不明白它的实用性。 我喜欢一些解释。

非常感谢,

JDelage

首先,您无法使用@Override注释 。 此批注指示方法声明旨在覆盖超类中的方法声明。

您不必注释覆盖方法, 如果使用此批注并且带注释的方法不会覆盖超类方法,则编译器将生成错误消息。

指示方法声明旨在覆盖超类中的方法声明。 如果使用此批注类型注释方法但不覆盖超类方法,则编译器需要生成错误消息。

http://download.oracle.com/javase/6/docs/api/java/lang/Override.html

我喜欢解释它的用法的情况是覆盖equals

这将是错误,因为equals需要一个Object参数:

 public class Foo{ @Override public boolean equals(Foo f){ return true; } } 

最好的例子 – 重写equals()

如果你写一个这样的类:

 public class Foo { public String bar; public boolean equals(Foo other) { return this.bar.equals(other.bar); } } 

然后你重载了equals方法,而不是像预期的那样覆盖Object.equals

如果使用@Override注释equals方法,编译器将给出一个错误,指出(正确地)您没有覆盖超类方法。

在Java 6中,您也可以使用它来实现接口方法 – 当您只在类中添加一个方法来满足某些接口时,这很方便,因此编译器可以检查它是否需要并提醒您更改接口。

与所有注释一样,它实际上是一个程序化注释,但让编译器检查您的假设(仍然)是否正确在这些情况下非常方便。

它表示您希望该方法覆盖超类方法。 当你拼错方法名称或给它错误的参数时,它确实派上用场,这样它就不会覆盖你认为它覆盖的内容。

这是一个传统的评论。 一些编译器确保@Override后跟的函数实际上是一个覆盖…只是一个故障保护