Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.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
使用@override java与不使用@override java有什么区别吗_Java_Android - Fatal编程技术网

使用@override java与不使用@override java有什么区别吗

使用@override java与不使用@override java有什么区别吗,java,android,Java,Android,假设我的runnable中有这个方法。 我总是删除@override。但我想知道这是否有任何负面影响? 我试图寻找,但什么也没找到 @Override public void run() { while (running) { } } 可以,但这将禁用编译时检查并降低其可读性。 由于保持原样不需要花费任何成本,因此您不应该花费任何精力来删除注释。从功能上讲,没有区别 但是,通过注释,您可以得到附加的检查,即有一个run()方法要覆盖,它可以在您不使用您认为正在使用的接口时捕获

假设我的runnable中有这个方法。 我总是删除@override。但我想知道这是否有任何负面影响? 我试图寻找,但什么也没找到

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

    }
}

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

从功能上讲,没有区别


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

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

@Target(value=METHOD)
@Retention(value=SOURCE)
public @interface Override
它只保留在源代码中

那有什么意义呢?它是在编译时检查的东西。这允许您声明有意重写超类中的方法

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

这背后的想法是,如果您要从第三方库扩展一个类,并重写它的一个方法,那么如果该方法不再存在,则需要发出警告。考虑升级您正在使用的外部库的版本,而不是<代码>无效运行()/代码>方法现在是“代码>空运行(字符串thordNeX)< /COD> .< 在这种情况下,您被重写的方法将永远不会被调用,因为它不再重写父方法(这不是最好的示例,因为您正在实现一个接口——因此编译无论如何都会失败,但是想象一下,如果它是一个类的话)


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

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

@Simon您需要保留覆盖方法,这样它就不会引起任何冲突。它允许您声明一个后来成为超类的方法。在整个程序和子类中创建可能多次使用的任何类的实例,理论上可以在另一个.java文件中,然后调用原始方法。例如,您可以绑定由按钮打开的JFrame,稍后在子类中重写,调用相同的方法,但创建一个显示不同内容的静态实例。因此,在1.java中,您创建了一个基本的可重用模板,但您要做的是重写已经调用其他类的ActionEvent之类的东西,因为我认为java并不关注允许您在彼此之间编写它们。如果你去掉一个结束括号,后面的侦听器有时会通过,但实际上只有1%的时间通过。