方法覆盖

Gan*_*row 7 java

你可以在不使用注释的情况下覆盖java中的方法吗?因为如果你使用JRE6,eclipse不支持它,你需要切换回5来使用@Override注释.如果删除注释,是否会覆盖此方法?

@Override public String toString() {
    return name + " [" + genre + "]";
    }
Run Code Online (Sandbox Code Playgroud)

coo*_*ird 8

你可以在不使用注释的情况下覆盖java中的方法吗?

是的,@Override注释不需要覆盖方法.

只是通过使用与祖先类相同的方法签名的方法定义的行为足以覆盖方法.

@Override注释只是一个提醒,指出该方法的定义是为了覆盖一个方法的编译器.

如果有一种方法@Override实际上并没有覆盖方法,编译器将抛出一个编译器错误-注释作为一个额外的编译时检查,以查看该方法的定义是否确实覆盖的方法.

因为如果你使用JRE6,eclipse不支持它,你需要切换回5以使用@Override注释.

我碰巧使用Eclipse定位Java 6,并且能够使用@Override注释,所以我不太确定是什么导致这种情况.Java 5支持注释,并且自Java 6以来已经更紧密地集成到该语言中.

编辑

从Andreas_D对该问题的评论:

微笑 - 这只是表明,您项目的当前源级别<1.5.这个设置与JRE非常独立,你实际上可以将JRE 1.6与源级别1.4一起使用 - 我猜,这就是发生的事情.

这肯定是编译错误可能发生的一种方式!

检查"编译器合规性级别"是否设置为Java 5下的内容的方法是,

  1. 转到Eclipse中Java项目的 Properties
  2. 然后,转到Java Compiler菜单
  3. 检查编译器合规性级别是否设置为1.5或更高.

编辑

关于Gandalf StormCrow的截图,似乎编译器合规性级别设置低于JDK 1.5.单击" 更改项目合规性"和"JRE到1.5快速修复"应该可以修复当前情况.

问题是,Java 5中引入了注释.

似乎Eclipse中的Java项目当前已设置,因此源代码只能包含在Java 5之前引入的功能,因此不允许使用注释.

修复这种情况的方法是告诉Eclipse,通过将编译器合规性级别设置为1.5或更高,可以使用Java 5的功能.