`

关于解决Java @Override的问题

    博客分类:
  • Java
阅读更多

首先看一下下面的示例代码 :

Parent.java

public class Parent{
    public void parentMethod() {
    }
}

IChild.java

public interface IChild {
    void interfaceMethod();
}

Child.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的支持这个功能就可以看出。

差一点忘了:

标准的java api文档java5与java6对Override annotation的的解释一样的

java5:

Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.

java6:

Indicates that a method declaration is intended to override a method declaration in a superclass. If a method is annotated with this annotation type but does not override a superclass method, compilers are required to generate an error message.

两段说明一模一样,让人搞不清楚的是java6文档没有提到Override对interface的支持。

 

在Eclipse或MyEclipse中开发时,尽管使用JDK的版本是JDK1.6,上面的代码还是会通不过编译的,因为你在建工程时,Eclipse默认的编译器使用的是1.4或者1.5,所以你要把编译器的版本修改为1.6才行,MyEclipse是设置成6.0,其实就是1.6Eclipse中的1.6.

解决办法:Windows->Preferences-->java->Compiler-->compiler compliance level设置成6.0就OK了.


结论(个人观点):  @Override是JDK5就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override .而JDK6修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@Override

分享到:
评论
4 楼 minidick 2016-02-26  
这个有点意思
3 楼 gold__sun 2015-02-03  
貌似1.6.10也是不行的
2 楼 ryxxlong 2010-01-07  
我也是Google了后,总结了一下.呵呵
1 楼 fhqllt 2010-01-06  
高,我也碰到过这样的问题,但一直没有思考为什么。

相关推荐

    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 按...

    The method of type must override a superclass method解决方式, myeclipse, java, web

    NULL 博文链接:https://thaipine.iteye.com/blog/2354220

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

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

    微型JavaWeb框架pippo.zip

    其概念是不是新的 (灵感来自于 Sinatra, Express JS, Play Framework),但目的是提供一个清晰,简单易用的模块化解决方案。 pippo可用于中小型应用,并应用在基于微服务架构的应用程序中。 示例代码:  ...

    java学习重点

    一、关于Java 1、Java的三种体系: J2SE 用于桌面开发,低端商务开发(Java to Standard Edition) ; J2ME 用于移动电话、电子消费品、嵌入式开发(Java to Micro Edition) ; J2EE 企业级解决方案的开发,基于WEB的...

    Java 高级特性.doc

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

    JAVA基础课程讲义

    方法的重写(override) 74 隐藏/封装(encapsulation) 75 为什么需要封装?封装的作用和含义? 75 使用访问控制符,实现封装 76 封装的使用细节 76 多态(polymorphism) 76 为什么需要多态? 76 如何实现多态? 77 方法...

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

    java.lang.RuntimeException: stop failed. at android.media.MediaRecorder.stop(Native Method)  解决办法:  在stop以前调用setOnErrorListener(null);就行了!  相关代码: /** 开始录制 */ @Override ...

    java版斗地主源码-MeiZiNews:有妹子的阅读app

    java版斗地主源码 2016/4/29 #MeiZiNews #夜间模式:Colorful 问题 RecyclerView的个别item的颜色还是前一个主题的 最后我在 clearRecyclerViewRecyclerBin下, 增加((RecyclerView) rootView).getRecycledViewPool...

    appium问题记录以及解决办法

    A new session could not be created. (Original error: Requested a new session but one was in progress) (WARNING: The server did ...Driver info: io.appium.java_client.android.AndroidDriver等问题的解决之道

    Java-如何解决多线程当中共享资源的冲突问题

    解决多线程当中共享资源冲突的问题 1. 冲突问题展示: /* * 共享资源冲突的问题 */ class SingleThread implements Runnable { // 共享资源,100张票 private static int ticket = 100; @Override public void ...

    jogger:Jogger - Java Web 框架

    Jogger 引入了其他框架( 、 、 和 )的最佳创意来创建一个在 Java 语言中不会感到陌生的解决方案。 Jogger 可以。 它也可以运行。入门首先,首先,然后创建一个具有main方法的类,如下所示: public class Main { ...

    java面试题

    子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是...

    JAVA面试题最全集

    一、Java基础知识 1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别。 2.字符串的操作: 写一个方法,实现字符串的反转,如:输入abc,输出cba 写一个方法,实现字符串的替换,如:输入...

    java 面试题 总结

    多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名问题。 2、String是最基本的数据类型吗? 基本数据类型包括byte、int、char、long、float、double、boolean和short。 java.lang....

    Java面试宝典-经典

    3、用jdom解析xml文件时如何解决中文问题?如何解析? 114 4、编程用JAVA解析XML的方式. 115 5、XML文档定义有几种形式?它们之间有何本质区别?解析XML文档有哪几种方式? 117 七. 流行的框架与新技术 117 1、谈谈你...

    Java~三种重写compare方法的PriorityQueue、TopK问题的解决思想附练习题(查找最小的K对数字与最后一块石头重量)

    因为在Java库函数里,PriorityQueue是基于小堆建立的,所以当我们需要大堆的时候需要对它进行改建。 方法一: static class com implements Comparator { //定义一个静态内部类,继承Comparator接口,并重写他的...

Global site tag (gtag.js) - Google Analytics