2

假设我的可运行文件中有这个方法。我总是删除那个@override。但是我想知道这是否有任何负面影响?我试图搜索但什么也没找到。

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

    }
}
4

4 回答 4

8

@Override注释不会对您的生产代码产生任何影响。实际上,注释甚至没有编码在您的类的java字节码中,这在注释的定义中有所说明:

@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override

它只保留在源代码中。

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

您会注意到,如果将@Override注释添加到未覆盖父方法的方法,则会出现编译错误。

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

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

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

于 2013-11-02T09:26:45.463 回答
1

从功能上讲,没有区别。

但是,通过注释,您可以获得附加检查,确认有一个run()方法可以覆盖,这可以捕获您不使用您认为正在使用的接口的错误。

于 2013-11-02T09:23:53.370 回答
0

如果添加该子句,则隐含地告诉编译器您正在覆盖超类型的方法,这导致它检查超类中具有相同名称的方法。这意味着如果您拼写错误或方法没有相同的返回类型,编译器会告诉您。

于 2013-11-02T09:27:02.503 回答
0

你可以,但这会禁用编译时检查并使其可读性降低。由于保持原样不会花费您任何费用,因此您不应该花费任何精力来删除注释。

于 2013-11-02T09:23:42.943 回答