服务热线:13616026886

技术文档 欢迎使用技术文档,我们为你提供从新手到专业开发者的所有资源,你也可以通过它日益精进

位置:首页 > 技术文档 > 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的支持。

扫描关注微信公众号