Java - 什么是"@Override"用于?

JDe*_*age 7 java syntax overriding

可能重复:
java中有什么"@Override"?

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

非常感谢,

JDelage

Jer*_*emy 8

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

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;
    }
}
Run Code Online (Sandbox Code Playgroud)


And*_*s_D 7

首先,你不能注释一个@Override.此批注指示方法声明旨在覆盖超类中的方法声明.

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


And*_*yle 5

最好的例子 - 覆盖equals().

如果你写一个这样的类:

public class Foo 
{
    public String bar;

    public boolean equals(Foo other)
    {
        return this.bar.equals(other.bar);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后你重载了equals方法,而不是Object.equals按预期覆盖.

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

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

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