在为实现接口的类使用@Override注释时,我在eclipse中遇到编译错误。
编译器合规性级别设置为Java 6.0。
我使用的是最新版本的6.0 jdk。
错误: “类型{classname}的方法{methodname}必须覆盖超类方法”
相同的代码可以在mac上正常工作。
public interface ChannelIF {
...
public boolean canSendNarrowcast();
public boolean canSendBroadcast();
}
public class FacebookChannel implements ChannelIF
{
...
@Override
public boolean canSendNarrowcast() { return true; }
@Override
public boolean canSendBroadcast() { return true; }
}
答案 0 :(得分:14)
此功能仅在Java 6及更高版本中有效。我看到你使用jdk 1.6 。非常好。可能的原因:您正在使用-source 1.5
进行编译。是这样的吗?如果是,您可以将其更改为-source 1.6
吗?
答案 1 :(得分:4)
我也面临着问题并且刚刚解决了。 在Project->右键单击> properties-> Java编译器中将“编译器合规性级别”更改为1.6。
答案 2 :(得分:3)
答案 3 :(得分:3)
我刚刚发现在使用maven时我还需要修改pom.xml以获得编译器插件。我已正确指定了所有设置,但我需要这个:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<inherited>true</inherited>
<configuration>
<source>1.6</source>
<target>1.6</target>
</configuration>
</plugin>
</plugins>
</build>
答案 4 :(得分:1)
所以,我一直遇到这个问题,经过几次上述解决方案后,看到我的Java版本一直设置为1.7,而不是使用Maven,所以只需退出并重新启动Eclipse一对@jdowdell建议的时间,之后,它似乎工作,直到我下次实施其中之一。我意识到,当我重新启动Eclipse时,它提示我保存我的文件,并且我意识到我的接口没有被保存,因此原始方法,即被覆盖的方法,在磁盘上不存在。这就是为什么退出并重新启动Eclipse可以解决问题的原因。
tl; dr:检查所有文件是否已保存。
答案 5 :(得分:0)
听起来您的方法签名不匹配。它们必须相同,包括抛出已检查的异常等内容。发布你的代码!
答案 6 :(得分:0)
检查运行时库, 编译器设置可能不同
右键单击项目名称,属性,Java Build Path,Libraries
查看JRE系统库的版本,很可能将其设置为1.5或更低。 选择JRE System库,然后单击“删除” 单击Add Library,选择JRE System Library,Next 然后是工作区默认值或
答案 7 :(得分:0)
我有同样的问题大约一个小时,然后它似乎神秘地解决了自己。我希望我知道我做了什么。我开始将工作区设置设置为1.6,无意中将项目设置设置为1.5兼容性。我发现了这一点并将项目编译器设置更改为1.6,这解决了一些错误,但没有解决接口的@Override问题。下面的一些组合修复了它:
一位研究员通过完全卸载并重新安装所有与java / eclipse相关的组件显然解决了这个问题:http://p2p.wrox.com/book-beginning-android-application-development/87299-override-errors-despite-1-6-a.html