你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:技术专栏 / Java专栏
Java6的@override注解与Java5不同之处
 
首先看一下下面的示例代码 :

  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的支持。

(编辑:aniston)

  推荐精品文章

·2024年12月目录 
·2024年11月目录 
·2024年10月目录 
·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089