java - 方法覆盖

标签 java

你能不使用注释重写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 下的方法是,

  1. 在 Eclipse 中转到 Java 项目的属性
  2. 然后,转到Java 编译器 菜单
  3. 检查 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/

相关文章:

java - 如何在hibernate中将条件结果设置为另一个pojo类变量

java - java中HashMap.containsValue()的时间复杂度是多少?

java - 用不同的Spring Boot插件Gradle多个子项目

java - 将部分透明的像素图绘制到纹理(libgdx)

java - 无法在 Jboss 7.1.1 中创建 mysql 数据源

macos - 使用 libjvm.dylib 插件时 Java 控制面板意外退出 |操作系统

java - J2ME - 在一个项目中支持不同平台

java - 在 Web 应用程序中 @Inject @Remote EJB

java - MySQL 更新语句不起作用

java - 无法添加到类集合框架中的列表