我想知道在我们要覆盖的代码前添加@Override
的功能是什么。我已经完成了没有它,似乎一切都进展顺利(至少对我而言)。
答案 0 :(得分:41)
不是必要,但强烈推荐。它可以防止你在脚下射击。它有助于防止你编写一个你认为覆盖另一个函数但却拼写错误并且你得到完全出乎意料的行为的函数。
答案 1 :(得分:28)
添加@Override的功能
当你说(通过注释)指定的方法应该覆盖超类方法(或在Java 6或更高版本中实现接口方法)时,它允许编译器仔细检查。实际上,如果方法没有覆盖超类方法(或实现接口方法),编译器会将此标记为错误。这通常表示您在方法名称中有拼写错误或在方法签名中出错。
我们真的需要@Override
需要它吗?绝对没有,但它的 便宜 方式
...当你的IDE帮助你包含它时甚至更便宜......
答案 2 :(得分:3)
建议使用它,因为它有助于管理一致性。想象一下有人会更改超类方法的名称(并且只在那里,而不是在类中进行名称更改,这取决于它是非常假设的:)),那么由于编译错误,您将是第一个知道的。
答案 3 :(得分:3)
唯一的区别是,如果您使用@Override注释方法并且您没有覆盖任何内容,编译器将会投诉。
答案 4 :(得分:1)
这有助于我避免拼写错误/方法名称中的案例差异。没有它,这些烦人的错误之一可能需要很长时间才能找到。
它没有添加任何功能上的差异,但是告诉编译器你认为你覆盖了一个方法,所以当你搞砸了某个方法时它可能会抱怨它是非常有用的!
答案 5 :(得分:1)
强烈建议使用它,因为它会增加你的代码的不足,并帮助其他人维护你的代码。
答案 6 :(得分:-3)
就我个人而言,除了IDE进行编译时错误检查之外我不认为它是有用的,但这是我的看法。原因:假设你有
Class A {
methodName() { System.out.println ("A"); }
}
class B extends A {
methodName() { System.out.println ("B"); }
}
在运行时,您可能会调用B.methodName() - B对B.methodName()是否覆盖类A()的相同名称无关紧要。对于B类,如果超类(A)实现methodName(),则不应该重要。我的意思是继承是单向的 - 你不能通过使用@override来取消继承 - 所有编译器都可以检查是否在超类中有一个具有相同签名的方法 - 无论如何都不会使用
对于其他答案,如果有人编辑A.java删除或重命名methodName()或更改其签名,您仍然可以毫无问题地调用B.methodName(),但前提是您不使用该@override。我认为这也是不成为Java语言的一部分的原因。
答案 7 :(得分:-6)
NO!
如果您发现它很有用,则需要一个真正的IDE,或者学习如何使用它。