Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中实现抽象方法时是否应该添加@Override注释?_Java_Annotations_Overriding_Abstract - Fatal编程技术网

在Java中实现抽象方法时是否应该添加@Override注释?

在Java中实现抽象方法时是否应该添加@Override注释?,java,annotations,overriding,abstract,Java,Annotations,Overriding,Abstract,在Java中重写非虚拟方法时,建议使用@Override注释,但如果实现一个抽象方法呢?那么我是否也应该使用@Override呢?在这种情况下,我倾向于使用@Override,这样,如果超类发生更改(或者完全删除该方法,或者更改其签名,等等),该方法就会在子类中被标记 唯一真正的区别是,如果没有注释,如果超类/接口中的方法被更改或删除,那么所讨论的实现只会成为该类的“正常”方法。因此,如果您只是为了履行合同而实现方法,那么您应该添加注释;如果该方法在您的类中有意义,那么您可能不应该添加它,而不管

在Java中重写非虚拟方法时,建议使用
@Override
注释,但如果实现一个抽象方法呢?那么我是否也应该使用
@Override
呢?

在这种情况下,我倾向于使用
@Override
,这样,如果超类发生更改(或者完全删除该方法,或者更改其签名,等等),该方法就会在子类中被标记


唯一真正的区别是,如果没有注释,如果超类/接口中的方法被更改或删除,那么所讨论的实现只会成为该类的“正常”方法。因此,如果您只是为了履行合同而实现方法,那么您应该添加注释;如果该方法在您的类中有意义,那么您可能不应该添加它,而不管是否有任何实现的接口或继承的抽象方法。

是的。Joshua Bloch建议您在有效的Java中进行实践。

是的,它再次告诉编译器,“我真的想在这里重写一个方法。如果没有相应的方法来重写,我犯了一个错误,希望别人告诉我!”


就我个人而言,我认为这只是一个注释而不是语言的一部分是很遗憾的(就像C#一样),但这当然是事后诸葛亮的好处。

实际上,Joshua Bloch,在《有效Java》(第二版)第178页的最后一段中,表示重写抽象方法的具体类的方法不必使用
override
注释,因为编译器无论如何都会给出错误。然而,“这样做是无害的”


我建议您选择一种策略并始终如一地坚持下去。

您还需要Java 6来利用此注释。Java 5不允许将它放在接口实现上。这节省了我几次时间。编译器会给出错误吗?你的意思是,如果一个具体类实现了一个不是超类的抽象方法的方法,编译器会抱怨它吗?这不可能是你的意思,但我不明白你的意思。@LarsH他的意思是,如果具体类未能在超类中实现抽象方法,编译器将给出一个错误,如果您拼错了子类需要实现的抽象方法的名称,就会出现这种情况。@espertus:谢谢您的澄清。因此,正如Andrzej所说,如果超类/接口中的方法被更改或删除,您将不会得到错误或警告。@LarsH是的,如果您使用Override标记,您只会得到错误/警告。