Java6的@override注解与Java5不同之处
2008-09-10 13:47
369 查看
From: http://java.ccidnet.com/art/3737/20070813/1174977_1.html
首先看一下下面的示例代码 :
Parent.java
IChild.java
Child.java
由于代码很简单,我就不做说明
上述代码在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的支持。
首先看一下下面的示例代码 :
Parent.java
public class Parent...{ public void parentMethod() ...{ } } |
public interface IChild ...{ void interfaceMethod(); } |
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的支持。
相关文章推荐
- Java6的@override注解与Java5不同之处
- java6的@override注解与java5的不同之处
- java6的@override注解与java5的不同之处
- 转帖 java6的@override注解与java5的不同之处 收藏
- Java 中的覆盖@Override注解 写与不写的一点点理解
- 管中窥豹Java5的新特性-注解(@Override)_Thinking in Java(4)_读书笔记(3)
- Java魔法堂:注解用法详解——@Override
- JAVA是否允许返回值类型不同的重载overload或覆盖override
- Java 中的覆盖@Override注解 写与不写的一点点理解
- eclipse编译项目:Java @Override 注解报错的解决方法
- 提高你的Java代码质量吧:注意@ Override不同版本的区别
- Scala学习6之scala与java的不同之总结2-重写override
- Java 注解(Annotation)@Override @Deprecated @SuppressWarnings
- Java中的注解以及应用 @Deprecated @SupressWarning @Override
- Java中的注解以及应用 @Deprecated @SupressWarning @Override
- java 注解:SuppressWarnings、Deprecated、Override
- Java中的注解以及应用 @Deprecated @SupressWarning @Override
- Java中的注解/注释详解(Override/Deprecated/SuppressWarning)
- JAVA 注解:SuppressWarnings、Deprecated、Override
- [每天一个知识点]17-Java语言-@Override注解