@Override是什么意思?


74
public class NaiveAlien extends Alien
{

    @Override
    public void harvest(){}

}

我试图理解我朋友的代码,但是代码中没有语法@Override。这有什么作用,为什么我们需要编码?谢谢。

Answers:


131

提示编译器让它知道您正在重写父类的方法(或Java 6中的接口)。

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

这对于快速识别输入错误或API更改非常有用。假设您尝试覆盖父类的方法harvest()但将其拼写harvset(),则程序将以静默方式调用基类,而如果没有@Override,则不会对此发出任何警告。

同样,如果您使用的是库,并且在库的版本2中harvest()已被修改为采用整数参数,则不再覆盖它。再次,@Override会很快告诉你。


18
请注意,@ Override仅适用于公共和受保护的函数。
MrMas

还应该提到,多个注释也是可能的,并且也可以使用此注释添加其他代码。例如,在Android M应用程序中检查权限时,如PermissionsDispatcher中所述。
not2qubit

29

此功能称为注释。@Override是使用注释让编译器知道的语法:“嘿,编译器,我正在更改父类中的收获”,然后编译器可以立即说:“伙计,您的命名错误”。正确命名后,编译器才会编译。

因此,没有此@Override注释,编译器将不会出错,它将被视为新的方法声明。此时将很难识别该错误。


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

9

@Override表示您要重写基类方法。在java6中,这还意味着您正在从接口实现方法。当您认为覆盖某个方法但输错了某些内容时,它可以保护您免受拼写错误的影响。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.