【问题标题】:Is there any difference with/without @override java [duplicate]有/没有@override java有什么区别[重复]
【发布时间】:2013-11-13 11:11:46
【问题描述】:

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

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

    }
}

【问题讨论】:

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

标签: java android


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    在功能上没有区别。

    但是,通过注释,您可以获得额外的检查,以检查是否存在要覆盖的 run() 方法,这可以捕获您未使用您认为正在使用的接口的错误。

    【讨论】:

      【解决方案3】:

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

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

      它只保留在源代码中。

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

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

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

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          猜你喜欢
          • 2012-10-15
          • 2014-11-08
          • 1970-01-01
          • 2012-05-09
          • 2017-02-17
          • 2011-09-27
          • 2013-04-22
          • 2012-03-29
          • 1970-01-01
          相关资源
          最近更新 更多