@Override是什么意思?
public class NaiveAlien extends Alien { @Override public void harvest(){} }
我试图了解我的朋友的代码,我没有得到在代码中的@Override语法。 这是做什么的,为什么我们需要编码? 谢谢。
这是编译器的一个提示,让它知道你正在重写父类的方法(或Java 6中的接口)。
如果编译器检测到没有函数可以覆盖,它会警告你(或错误)。
这对于快速识别拼写错误或API更改非常有用。 假设你想覆盖父类的方法harvest()
但拼出harvset()
,你的程序将默默地调用基类,没有@Override
,你不会有任何警告。
同样的,如果你正在使用一个库,并且在库的版本2中,已经修改了harvest()
来获取一个整型参数,那么你将不再覆盖它。 再次, @Override
会很快告诉你。
这个特征被称为注解。 @Override
是使用注释让编译器知道“hey compiler,我正在改变在父类中的收获”的语法,那么编译器可以立即说:“伙计,你是不正确地命名它”。 只有正确命名,编译器才会编译。
所以,如果没有这个@Override
注解,编译器将不会出错,它将被视为新的方法声明。 在这一点上很难认识到这个错误。
@Override
意味着你正在重写基类的方法。 在java6中,这也意味着你正在从一个接口实现一个方法。 它可以保护你免受错别字,当你认为是压倒一切的方法,但错误的东西。
方法重写是在已经存在于父类中的子类中声明一个方法。
下面是一个简单的例子: Boy class
扩展了Human class
。 这两个类都有一个通用的方法void eat()
。 Boy class
给eat()
方法自己的实现,或者换句话说就是重写eat()
方法。
class Human{ public void eat() { System.out.println("Human is eating"); } } class Boy extends Human{ @override public void eat(){ System.out.println("Boy is eating"); } public static void main( String args[]) { Boy obj = new Boy(); obj.eat(); } }
当编译器在您的代码中看到@override
,它会自动调用基类,这对于检测拼写错误是非常有用的,以防错过拼写方法。