你能不使用注释重写java中的方法吗?因为如果使用JRE6 eclipse不支持,需要切换回5才能使用@Override
注解。如果我删除注解,这个方法会被覆盖吗?
@Override public String toString() {
return name + " [" + genre + "]";
}
最佳答案
Can you override method in java without using annotations?
是的,@Override
注释不需要覆盖方法。
仅通过具有与祖先类相同的方法签名的方法定义就足以覆盖方法。
@Override
注释只是对编译器的提醒,表明方法定义旨在覆盖方法。
如果具有@Override
的方法实际上并未重写方法,编译器将抛出编译器错误——注解作为额外的编译时检查,以查看方法定义是否正确确实覆盖了一个方法。
Because eclipse doesn't support it if you use JRE6, you need to switch back to 5 to use @Override annotation.
我碰巧使用了针对 Java 6 的 Eclipse,并且能够使用 @Override
注释,所以我不太确定是什么导致了这个问题。注解从 Java 5 开始得到支持,并且从 Java 6 开始更紧密地集成到语言中。
编辑
来自 Andreas_D 对问题的评论:
smile - this just indicates, that the current source level for your project is < 1.5. This setting is pretty independant from the JRE, you actually can use JRE 1.6 together with source level 1.4 - and I guess, that's what happened.
这似乎是可能发生编译错误的一种方式!
检查“compiler compliance level”是否设置为 Java 5 下的方法是,
- 在 Eclipse 中转到 Java 项目的属性
- 然后,转到Java 编译器 菜单
- 检查 Compiler Compliance Level 是否设置为 1.5 或更高。
编辑
关于 Gandalf StormCrow 的屏幕截图,似乎编译器合规级别设置为低于 JDK 1.5。单击Change project compliance and JRE to 1.5 快速修复应该可以修复当前情况。
问题是,注释是在 Java 5 中引入的。
看来 Eclipse 中的 Java 项目当前设置为源代码只能包含 Java 5 之前引入的功能,因此不允许使用注释。
解决此问题的方法是通过将编译器合规级别设置为1.5或更高来告诉 Eclipse 可以使用 Java 5 中的功能。
关于java - 方法覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491085/