假设我在runnable中有这个方法。 我总是删除@override。但我想知道这是否有任何负面影响? 我试图搜索但没有找到任何东西。
@Override
public void run() {
while (running) {
}
}
答案 0 :(得分:7)
@Override
注释对您的生产代码没有任何影响。事实上,注释甚至没有在您的类的java字节代码中编码,这在注释的定义中说明:
@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
它仅保留在源代码中。
那有什么意义呢?嗯,这是在编译时检查的东西。这允许您声明您有意覆盖超类中的方法。
您会注意到,如果将@Override
注释添加到未覆盖父方法的方法,那么您将收到编译错误。
这背后的想法是,如果您从第三方库扩展一个类,并覆盖其中一个方法,那么如果该方法不再存在,则需要发出警告。考虑升级您正在使用的外部库的版本,而不是void run()
该方法现在是void run(String threadName)
。
在这种情况下,你的被覆盖的方法永远不会被调用,因为它不再覆盖父方法(不是最好的例子,因为你正在实现一个接口 - 所以编译失败无论如何,但想象一下如果它是类)。
当您从类和接口覆盖方法时,可以设置此批注(尽管这仅在Java 1.6及更高版本中支持)。
答案 1 :(得分:1)
从功能上讲,没有区别。
但是,使用注释,您可以获得添加的检查,即要覆盖run()
方法,这可以捕获您未使用您认为正在使用的界面的错误。
答案 2 :(得分:0)
您可以,但这会禁用编译时检查并使其可读性降低。 既然不花费任何东西就可以保留原样,你不应该花费任何精力去删除注释。
答案 3 :(得分:0)
如果添加子句,则隐式告诉编译器您正在从超类型覆盖方法,这会导致它检查超类中具有相同名称的方法。这意味着如果你拼写错误或方法没有相同的返回类型,编译器会告诉你。