与@override java有什么区别吗?

ang*_*and 1 java android

假设我在runnable中有这个方法.我总是删除@override.但我想知道这是否有任何负面影响?我试图搜索但没有找到任何东西.

@Override
public void run() {
    while (running) {

    }
}
Run Code Online (Sandbox Code Playgroud)

jwa*_*jwa 7

@Override注释不会对你的产品代码任何区别.实际上,注释甚至没有在类的java字节代码中编码,这在注释的定义中说明:

@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
Run Code Online (Sandbox Code Playgroud)

它仅保留在源代码中.

那有什么意义呢?嗯,这是在编译时检查的东西.这允许您声明您有意覆盖超类中的方法.

您会注意到,如果将@Override注释添加到不覆盖父方法的方法,那么您将收到编译错误.

这背后的想法是,如果您从第三方库扩展一个类,并覆盖其中一个方法,那么如果该方法不再存在,则需要发出警告.考虑升级您正在使用的外部库的版本,而不是void run()现在的方法void run(String threadName).

在这种情况下,你的重写方法永远不会被调用,因为它不再覆盖父方法(不是最好的例子,因为你正在实现一个接口 - 所以编译失败无论如何,但想象它是否是一个类).

当您从类和接口覆盖方法时,可以设置此批注(尽管这仅在Java 1.6及更高版本中支持).