“覆盖”是什么意思?

public class NaiveAlien extends Alien
{


@Override
public void harvest(){}


}

我试图理解我朋友的代码,但是我不明白这个语法,@Override in the code。这是做什么的,为什么我们需要在编码? 谢谢。

95340 次浏览

这是一个提示,让编译器知道您正在重写父类(或 Java6中的接口)的方法。

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

这对于快速识别输入错误或 API 更改非常有用。假设您试图重写父类的方法 harvest(),但拼写它为 harvset(),您的程序将静默地调用基类,如果没有 @Override,您就不会收到任何警告。

同样,如果您正在使用一个库,并且在该库的版本2中,harvest()已被修改为采用一个整数参数,那么您将不再重写它。同样,@Override会很快告诉你。

@Override意味着您正在重写基类方法。在 java6中,这也意味着您正在从一个接口实现一个方法。当您认为重写了一个方法,但是您输入错误时,它可以保护您免受输入错误的影响。

这个特性称为注释。@Override的语法是使用注释让编译器知道,“嘿,编译器,我正在改变父类中的收获”,然后编译器可以立即说,“伙计,你的命名不正确”。在正确命名之前,编译器不会编译。

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