【问题标题】:Do we really need @Override and so on when code Java? [duplicate]在编写 Java 代码时,我们真的需要 @Override 等吗? [复制]
【发布时间】:2011-01-27 22:57:51
【问题描述】:

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

我想知道在我们要覆盖的代码前面添加@Override 的功能是什么。不管有没有它,我都做过,似乎一切都很顺利(至少,对我来说)。

【问题讨论】:

  • 一方面,您可以获得更好的编译时间检查。重复:stackoverflow.com/questions/94361/…
  • 当我从 Delphi 切换到 Java 时,我感到非常放松,我不再需要“虚拟”了……@Override 是退一步。现在大多数 IDE 都具有自动覆盖功能,因此它很少由手工编写,但有助于形成蓬松的 java 风格:)
  • @bestsss - 没有人强迫你使用@Override。但是你不敢从 >>I
  • @Stephen C: ugg,我知道我变老了,我的记忆力正在衰退,但我不记得这样做了。

标签: java overriding


【解决方案1】:

这不是必需,但强烈推荐。它可以防止你在脚下射击自己。它有助于防止当您编写一个您认为会覆盖另一个函数但您拼错某些内容并得到完全意外行为的情况。

【讨论】:

    【解决方案2】:

    添加@Override的功能是什么

    当您说(通过注释)指定的方法应该覆盖超类方法(或在 Java 6 或更高版本中实现接口方法)时,它会让编译器为您仔细检查。如果该方法实际上没有覆盖超类方法(或实现接口方法),编译器会将其标记为错误。这通常表明您的方法名称有错字或方法签名有误。

    我们真的需要@Override

    需要吗?绝对不需要,但它是一种便宜的方式

    • 向人类读者明确传达这是一种压倒一切的方法,并且
    • 在编译时捕获一个错误,它可能需要至少几个脑循环才能在运行时捕获一旦你知道要查找它

    ...当您的 IDE 帮助您包含它时,甚至更便宜...

    【讨论】:

      【解决方案3】:

      建议这样做,因为它有助于管理一致性。想象一下,有人会更改超类方法的名称(并且仅在那儿,没有根据它在类中执行名称更改,这是非常假设的:)),那么由于编译错误,您将是第一个知道的人。

      【讨论】:

        【解决方案4】:

        唯一的区别是,如果你用 @Override 注释一个方法并且你没有覆盖任何东西,编译器会抱怨。

        查看When do you use javas override annotation and why?

        【讨论】:

          【解决方案5】:

          它多次帮助我避免拼写错误/方法名称的大小写差异。没有它,它就是这些烦人的错误之一,可能需要很长时间才能找到。

          它不会增加任何功能差异,但告诉编译器您认为您正在覆盖一个方法,因此当您在某个地方搞砸时,它会抱怨您不是非常有用!

          【讨论】:

            【解决方案6】:

            强烈推荐使用它,因为它增加了你的代码的可悲性并帮助其他人维护你的代码。

            【讨论】:

              【解决方案7】:

              我个人认为除了 IDE 进行编译时错误检查之外它没有用,但这是我的看法。原因:假设你有

              Class A { 
                  methodName() { System.out.println ("A"); }
              }
              
              class B extends A { 
                  methodName() { System.out.println ("B"); }
              }
              

              在运行时,您可能会调用 B.methodName() - B.methodName() 是否覆盖类 A() 的相同名称与 B 无关。对于 B 类,超类 (A) 是否实现 methodName() 甚至都无关紧要。我的意思是继承是单向的——你不能通过使用@override 来取消继承——编译器可以检查的是在超类中是否存在具有相同签名的方法——无论如何都不会使用.

              对于其他答案,如果有人编辑 A.java 以删除或重命名 methodName() 或更改其签名,您仍然可以毫无问题地调用 B.methodName(),但前提是您不使用该 @override。我认为这也是它成为 Java 语言一部分的原因。

              【讨论】:

              • @Override Java 语言的一部分 - 请参阅 java.sun.com/docs/books/jls/third_edition/html/…
              • 可能是我没说对 - 我一般不会考虑注释 - 只是 @override 的实用程序。
              • 如果你想说你认为它没有用......就这么说吧。你实际上所说的显然是错误的。
              • 好的,所以它 java 语言的一部分,我错了。顺便说一句,由于上述原因,我仍然认为它没有用。
              【解决方案8】:

              不!

              如果你觉得它有用,你需要一个真正的 IDE,或者学习如何使用它。

              【讨论】:

              • -1:您从来没有被意外更改签名而被咬过,因此该方法不再被覆盖?
              • Ummm ... 编程语言的设计不应以使用特定 IDE 为前提。
              • @irreputable IntelliJ 在这种情况下将如何提供帮助?
              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2013-06-04
              • 2011-03-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多