我正在使用eclipse,当我使用快捷方式生成覆盖实现时,那里有一个覆盖注释,我正在使用JDK 6,这没关系,但是在JDK 5下这个注释会导致错误,所以我想要问一下,如果这个注释完全没用?编译器是否会使用此批注进行某种优化?
答案 0 :(得分:4)
它的目的是让编译器能够告诉你何时该方法实际上不会覆盖超类方法。例如,假设您拼错了名称,通过编辑将编辑器警告您该方法没有覆盖任何内容,因此您将能够捕获您的错误,而不是运行您的程序而不理解为什么您的方法永远不会得到调用。
答案 1 :(得分:3)
注释非常有价值,因为它会清楚地表明新方法是否覆盖父类的方法。例如,你可能会认为你已经覆盖了,但是你拼错了方法名称(或者被覆盖的方法的签名在此期间已经改变了)。
答案 2 :(得分:3)
这不是没用的。它有助于读者理解代码和编写器以避免错误。
也就是说,JDK 5和JDK 6与@Override
的行为不同,所以只要它们导致问题就删除它们。它们完全没有功能差异。
答案 3 :(得分:3)
正如其他人所指出的,@Override
注释实际上是一个编译器指令,如果用javac
注释的方法实际上没有覆盖其父类中的方法,则指示@Override
尖叫(例如,您实际上正在超载,因为您已决定更改方法签名或拼错方法名称。)
在 JDK 5 下,直接从界面实现方法不被视为覆盖该方法,如果使用@Override
进行注释,则会被视为错误。
部分由于用户反馈,这是一个非常令人困惑的行为, JDK 6 改变了这种行为,并认为从使用@Override
的接口注释您实现的方法是正确的。
答案 4 :(得分:2)
根据您将部署到的JDK编译代码。
问题是注释对于从基类中重写方法和在版本6中的接口中定义的方法有效,但仅针对版本5中的重写方法。因此,在接口中定义的方法上的@override将导致错误在JDK 5中。