【问题标题】:Is it compulsory to annotate inherited methods with @Override? [duplicate]是否必须使用 @Override 注释继承的方法? [复制]
【发布时间】:2011-12-20 15:47:02
【问题描述】:

可能重复:
When do you use Java's @Override annotation and why?

新手问题 - 我正在编写我的第一个 Android 应用程序(它是我的第二个 Java 应用程序)。我注意到在示例中 onCreate() 方法具有 @Override 注释,但我没有使用该注释,它似乎工作正常。

使用@Override 注释只是一种好习惯,还是我要为自己的问题做好准备。其他继承的方法——onPause 等呢?

【问题讨论】:

标签: java android inheritance overriding


【解决方案1】:

@Override 注释允许编译器确保您实际上覆盖了方法或实现了接口方法(Java 6+)。这可以避免一类简单的错误,例如搞砸方法签名而不是实际覆盖您认为的内容。

这不是强制性的,但这是一个好主意,并且可以从编译器那里获得免费帮助。

【讨论】:

  • 但它不是免费的,不是吗?只需一行代码。
  • @OndrejSotolar ... 甚至不知道如何应对。
【解决方案2】:

这是一种很好的做法,

  • 帮助开发人员查看哪些方法被覆盖
  • 让编译器检查签名是否符合被覆盖的方法

【讨论】:

  • +1 尤其是第二点。但首先不要依赖它,因为它不是强制性的:任何好的 IDE(Eclipse、IntelliJ)都会向您显示独立于 @Override 注释的覆盖方法。
【解决方案3】:

如果您真的是新手,那么您必须了解编译时(编译源代码时)和运行时(运行编译后的类时)。

假设,您需要重写某个方法,但在重写该方法时,您给出了错误的签名(不同于原来的签名)。

现在,在这种情况下,如果使用了 @Override 注释,那么编译器会告诉你实际上并没有覆盖该方法,即使你是这么想的。

但是,如果您不使用该注释,它将编译,最终结果是运行时中的一些错误。

【讨论】:

    【解决方案4】:

    我认为这只是一种很好的做法,而是一种非常好的做法。 除了对程序员的提醒之外,它还可以帮助您不要在程序中留下死代码,并经常避免愚蠢的错误。

    例如,如果您覆盖基类的方法foo(),然后从基类中删除此方法。如果您不使用 @Override 注释,则无法再访问的代码可能仍然存在于子类中。但是如果你确实使用了@Override,你会得到编译错误,这表明你必须对代码做一些事情。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-10
      • 1970-01-01
      • 2012-02-02
      • 2013-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多