关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.

时间:2022-12-02 15:12:18

遇到这个问题说来也怪.新开了一个path的工作空间用来打patch.该Eclipse的默认全局的编译版本是1.6.但是唯独其中的一个插件项目的版本是1.5(可能是唯一的一个,不确定,不知道为什么会是这样)

然后这个插件中编译错误,该编译错误就是这个Override注解的使用.

一开始秉承同事告诉我的"只要保证全局Eclipse编译版本是1.6就可以",具体的插件版本如果不同不需要修改的原则.打patch,通过产品测试之后发现.如果不解决下面关于Override的问题就会报在编译中报出的bug.(具体的异常信息就是使用了Override但是父类中却没有对应的方法.)

通过这个问题也可以知道如果对应的java文件有编译错误的话是不能打用其class文件进行打patch的.

Override注解既可以用在实现类对其父类方法的重写,也可以用于实现类对其实现接口中方法的重写.

但是在JDK1.6之前如果在实现接口的方法上部加上@Override注解的话,Eclipse编译是会报错的.

JDK1.5: 
当继承一个类,并对其中的方法重写的时,需要加这个注释。 实现接口的时候不能加,加上Eclipse编译报错。

JDK1.6: 
继承类重写方法,或者实现接口的时候,都会带上@Override

只是开发中发现的,没有看到官方文档对此的说明.

附图:

关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.

&

关于Override在JDK1.5和JDK1.6上子类实现接口中方法使用@Override注解编译错误.

如果把编译环境变成1.6+就没有改问题了.

//==================================================================

看书之后补充:

在Java1.5版本上编译代码就会出现如下错误:

The method *****() of type **** must override a superclass method ****.java

注意,这是个错误,不能继续编译,原因是1.5版本中的@Override是严格遵守覆写的定义:子类方法与父类方法必须具有相同的方法名,输入参数,输出参数(允许子类缩小),访问权限(允许子类扩大),父类必须是一个类,不能是一个接口,否则不能算是覆写.

而在Java1.6就开放了很多,实现接口的方法也可以加上@Override注解了,可以避免粗心大意导致方法名称与接口不一致的情况发生.

在多环境部署应用时,需要考虑@Override在不同版本下代表的意义,如果是Java1.6版本移植到1.5版本环境中,就需要删除实现接口方法上的@Override注解.