@Override是什么意思?

74
public class NaiveAlien extends Alien
{

    @Override
    public void harvest(){}

}

我在试图理解我的朋友的代码,但我不明白代码中的语法,@Override是什么意思,为什么在编码时需要使用它?谢谢。

3个回答

135

这是给编译器的提示,让它知道你正在覆盖父类(或Java 6中的接口)的方法。

如果编译器检测到没有要覆盖的函数,它会发出警告(或错误)。

这对于快速识别拼写错误或API更改非常有用。假设您想覆盖父类的方法harvest()但是拼写为harvset(),你的程序将默默调用基类,而没有@Override,你将不会收到任何有关此问题的警告。

同样地,如果您正在使用库,并且在库的第2个版本中,harvest()已被修改以接受整数参数,则您将不再覆盖它。再次,@Override会迅速告诉您。


20
请注意,@Override 仅适用于公共的和受保护的函数。 - MrMas
还应该提到,多个注释也是可能的,并且可以使用其他代码进行添加。例如,在 Android M 应用程序中检查权限时,就像在 PermissionsDispatcher 中所做的那样。 - not2qubit

31

这个功能称为注释。使用注释的语法@Override告诉编译器,“嘿,编译器,我正在改变父类中harvest的功能”,然后编译器可以立即指出,“哥们,你的命名不正确”。直到你正确命名它之前,编译器都不会编译。

因此,如果没有这个@Override注释,编译器将不会出现错误,并且它将被视为新的方法声明。在这一点上,很难识别错误。


1
大小写很重要,我们在谈论@Override,伙计 :) - datafiddler

9

@Override 表示你正在重写基类方法。在Java6中,它也意味着你正在实现一个接口的方法。当你认为正在重写一个方法但你打错了一些东西时,它可以保护你免受拼写错误的影响。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接