2010-12-03 108 views
66
public class NaiveAlien extends Alien 
{ 

    @Override 
    public void harvest(){} 

} 

我想了解我的朋友的代码,并且我没有在代码中获得@Override的语法。这是做什么的,为什么我们需要编码? 谢谢。@Override是什么意思?

回答

122

这是编译器的一个暗示,让它知道你重写了父类(或Java 6中的接口)的方法。

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

这对于快速识别错字或API更改非常有用。假设你试图覆盖父类的方法harvest(),但拼出它harvset(),你的程序将默默地调用基类,没有@Override,你不会有任何警告。

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

+14

请注意,@Override仅适用于公共和受保护的功能。 – MrMas 2013-05-09 16:01:35

+0

还应该提及的是,**多个**注释也是可能的,并且其他代码也可以使用这个添加。例如,在Android M应用程序中检查权限时,就像在[PermissionsDispatcher](https://github.com/hotchemi/PermissionsDispatcher)中所做的那样。 – not2qubit 2017-01-18 10:00:46

9

@Override表示您重写基类方法。在java6中,它也意味着你正在从一个接口实现一个方法。当您认为重写某种方法但错误输入某些内容时,它可以防止错别字。

23

此功能称为注释。 @Override是使用注释让编译器知道“hey编译器,我正在改变父类中的收获”的语法,然后编译器可以立即说出“老兄,你错误地命名了它”。除非您正确命名,编译器才会编译。

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