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

时间:2010-11-15 14:41:44

标签: java syntax override

  

可能重复:
  What's “@Override” there for in java?

到目前为止,我从未在方法之前添加“@Override”。我看到了一些代码示例,但我不明白它的实用性。我想要一些解释。

非常感谢,

JDelage

5 个答案:

答案 0 :(得分: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;
    }
}

答案 1 :(得分:7)

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

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

答案 2 :(得分:5)

最好的例子 - 覆盖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中,您也可以使用它来实现接口方法 - 当您只在类中添加一个方法来满足某个接口时,这很方便,因此编译器可以检查它是否是必需的并提醒您界面变化。

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

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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