`
winnerlxh
  • 浏览: 89818 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

@override 报错 解决

    博客分类:
  • j2se
阅读更多
首先看一下下面的示例代码 :

Parent.java
Java代码 
public class Parent...{  
    public void parentMethod() ...{  
    }  


IChild.java
Java代码 
public interface IChild ...{  
    void interfaceMethod();  


Child.java
Java代码 
public class Child extends Parent implements IChild ...{  
 
    @Override 
    public void parentMethod() ...{  
    }  
 
    @Override 
    public void interfaceMethod() ...{  
    }  


由于代码很简单,我就不做说明
上述代码在jdk6下可以编译通过
而在jdk5下编译无法通过,输出的错误信息如下:
Child.java:7: 方法未覆盖其父类的方法
    @Override
     ^
1 错误

上面的错误信息说在Child.java第七行的Override注解是不对的,不对的原因是该方法(interfaceMethod)不是父类方法。

当然,实际上这个方法是类实现的接口中方法,但是,这个语法的jdk6的下面是可以通过的,也就是说java6认为类覆盖父类方法与实现接口方法都叫override,而jdk5不是这样认为的,不知道这是当初jdk5的bug,还是当初就是认为覆盖父类方法与实现接口方法是不一样的,不得而知。但是从OO角度来看,覆盖父类方法与实现接口方法都可以认为override,因为他们目的都是一样的,都是为了重用,都是多态的一种表现方式。这从jdk6的支持这个功能就可以看出。

解决方法:
第一种解决方案:
@Override是JDK5 就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override
而JDK6 修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override

修改你的eclipse指定的编译器版本
在选项里的java compiler中指定版本至少在5.0以上

在myEclipse中改变编译器的方法:Project->Properties->Java Compiler->Configure Workspace Setting,在弹出的页面中可以进行设置。
这个来自于:http://blog.csdn.net/CodeJoker/archive/2009/07/02/4317361.aspx

第二种解决方案:(我使用这种方法,没有问题)
在JAVA 1.5和1.6中@override的用法是有些区别的,虽然改变了JRE但eclipse还是会报错。
解决办法:Windows->Preferences-->java->Compiler-->compiler compliance level设置成6.0就OK了.
注意:
但是在导入一个工程时,编译并打包到Tomcat后,发现出现java.lang.UnsupportedClassVersionError: Bad version number in .class file异常,检查了一下我的myEclipse,我发现我的eclipse的compiler的jdk版本,tomcat所用的jdk版本不一致,后来设置成一致就可以了。看来果然是这个问题引起。
    那次在Linux上部署工程时也出现过因为版本不同引起的问题,那时我们用的IDE的编译器是JDK5.0,而那台Linux装的是JDK6.0,部署后发现很多功能都出错,看来有些东西还是注意一下啊。
    附,在myEclipse中改变编译器的方法:Project->Proper的ties->Java Compiler->Configure Workspace Setting,在弹出的页面中可以进行设置

其实这种方式与第二种差不多,殊途同归。第一种方式重点是设置这一个项目。而第二种重点设置所以项目。不过都可以用。
如果通过上面的设置你还有错(错误信息:Java compiler level does not match the version of the installed Java project facet.)的话,请看下你这里的设置和你的jre的版本是不是一样的,如果不是一样的话,改成一样的就可以了:



右 键点击出错的工程,选择属性,在弹出的preference中找到Project Facets,然后可以看到当前工程使用的jdk版本号,再看看你当前Studio中Install JREs,这两个应该不同,你把facets中的java版本修改为与你的jre版本一致就可以了。
  • 大小: 22 KB
分享到:
评论

相关推荐

    android @override 报错解决方案

    现象: … java: 1801: method does not override a method from its superclass @Override… 原因: Eclipse is defaulting to Java 1.5 and you have classes implementing interface methods (which in Java 1.6 ...

    个人开发中遇到常见问题及解决办法(吐血总结)

    9 Java @override报错的解决方法 10 js实现 选中子页面的checkbox,点击确认,将选中的数据显示到父页面 11 解析oracle的rownum 12 ava web项目中开放一个webservice接口实例 13 js方式实现 系统时间显示 14 js 按...

    解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法

    主要介绍了解决mybatis-plus3.1.1版本使用lambda表达式查询报错的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    解决Android MediaRecorder录制视频过短问题

    具体表现:  调用MediaRecorder的start()与stop()... 解决办法:  在stop以前调用setOnErrorListener(null);就行了!  相关代码: /** 开始录制 */ @Override public MediaPart startRecord() { if (mMediaObj

    java.security.cert.CertificateException: No subject alternative DNS name matching XXX found解决方案

    网上搜了一堆,都无法生效,最终找到了一个完美解决方案: 在代码层跳出SSL验证 1、观察异常日志信息如下: 2、新增跳过证书的类,TrustAllTrustManager.java,代码如下: public class TrustAllTrustManager ...

    MSSQL2005数据附加失败报错3456解决办法

    解决办法: 1.新建一个同名的数据库(数据文件与原来的要一致) 2.再停掉sql server(注意不要分离数据库) 3.... 代码如下: USE MASTER GO SP_CONFIGURE ‘ALLOW UPDATES’, 1 RECONFIGURE WITH OVERRIDE GO UPDA

    Java 高级特性.doc

    再看看这个代码:一看就知道有问题, 这里 就有个很好的解决办法,在写public @interface MyAnnotation {}这样的类的时候,下面的代码上的错误提示就是结束的! public class dsds { public static void main(String[] ...

    linux全志R16的linux系统编译的资料_20170502_1655.7z

    (编译请使用编译android的lichee的选项编译生成的.config文件,不然直接编译会报错!!!!) rootroot@cm-System-Product-Name:/home/wwt/linux_r16$ tar zxvf lichee_parrotv1.1_20161202.tar.gz rootroot@cm-...

    asp.net知识库

    在ASP.NET页面中推荐使用覆写(Override)而不是事件处理(Event Handler) 常用编码工具类,支持base64,md5,des,crc32 也谈谈技术面试 在C#里把ArrayList转换为Array 或 把Array转换为ArrayList C# 2.0 在.NET 2.0中...

    BCGControlBarPro.v12.00

    1、直接在“解决方案资源管理器”-“资源文件”中点右键,“添加”-“现有项”,把C:\Program Files\BCGSoft\BCGControlBarPro\BCGCBPro\Styles中所有扩展名为 .rc 的资源包括进来即可。 2、直接在“资源视图”-“您...

Global site tag (gtag.js) - Google Analytics