与@override java有什么区别吗?

时间:2013-11-02 09:21:34

标签: java android

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

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

    }
}

4 个答案:

答案 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)

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