文档章节

@Override在jdk5下用在interface上编译不过

谦谦君子
 谦谦君子
发布于 2013/08/20 17:11
字数 138
阅读 690
收藏 0

直接上代码吧,下面这段代码在jdk5可以编译通过

abstract class TestOverride {
	abstract void toOverride() throws Exception;
}

public class TestInterfaceOverride {

	public static void main(String[] args) throws Exception {
		TestOverride testOverride = new TestOverride() {

			@Override
			public void toOverride() throws Exception {
				System.out.println("xxx");

			}
		};
		testOverride.toOverride();
	}
}
下面这段代码在jdk5下编译不过,提示“The method toOverride() of type new TestOverride(){} must override a superclass method”
interface TestOverride {
	void toOverride() throws Exception;
}

public class TestInterfaceOverride {

	public static void main(String[] args) throws Exception {
		TestOverride testOverride = new TestOverride() {

			@Override
			public void toOverride() throws Exception {
				System.out.println("xxx");

			}
		};
		testOverride.toOverride();
	}
}
但是两段代码在jdk6以后都可以编译通过。

© 著作权归作者所有

共有 人打赏支持
谦谦君子
粉丝 38
博文 59
码字总数 50480
作品 0
成都
程序员
私信 提问
加载中

评论(4)

谦谦君子
谦谦君子

引用来自“红薯”的评论

JDK 5 不支持接口上的 @Override

嗯,谢谢老大的回复哈~~
谦谦君子
谦谦君子

引用来自“mononite”的评论

@Override在JDK5引入的时候,要解决的问题是避免重写父类方法出现错误,比如拼写错误,或者是用了错误的方法签名,如果没有@Override编译器是没办法提示出错的。这个问题对接口来说是不存在的,没有正确重写接口的方法,没有@Override也能报错。所以JDK5里不允许在接口方法加@Override应该是刻意的。
但在实际项目里,接口里的方法不仅会添加和修改,也会删除,如果删除了接口已有的方法,那没有简单的办法去删除已有实现类中的多余方法,而接口方法如果能用@Override,那就很容易了,所以JDK6里允许@Override用在接口方法上,是更务实的一种做法,也不难理解。

解释得很详细,受教了,谢谢~~
m
mononite
@Override在JDK5引入的时候,要解决的问题是避免重写父类方法出现错误,比如拼写错误,或者是用了错误的方法签名,如果没有@Override编译器是没办法提示出错的。这个问题对接口来说是不存在的,没有正确重写接口的方法,没有@Override也能报错。所以JDK5里不允许在接口方法加@Override应该是刻意的。
但在实际项目里,接口里的方法不仅会添加和修改,也会删除,如果删除了接口已有的方法,那没有简单的办法去删除已有实现类中的多余方法,而接口方法如果能用@Override,那就很容易了,所以JDK6里允许@Override用在接口方法上,是更务实的一种做法,也不难理解。
红薯
红薯
JDK 5 不支持接口上的 @Override
[java]@override 报错处理

有时候在自己电脑上编译通过的java代码,在别人那里却编译不通过,总是@override报错,把@override去掉就好了,但不能从根本上解决问题。 据说这是jdk的问题,@Override是JDK5就已经有了,但...

亭子happy
2012/10/24
0
0
Eclipse Java @Override 报错

笨办法 把@override去掉就好了,但不能从根本上解决问题,因为有时候有@override的地方超级多。 这是jdk的问题,@Override是JDK5就已经有了,但是不支持对接口的实现,认为这不是Override而报...

boonya
2016/11/16
6
0
Eclipse @override报错解决

我想这个问题肯定困扰了很多人,我也不例外。新公司用的东西多多少少会与我们以前公司的有所不同。所以这个问题也时常伴随在我们身边。 第一种解决方案: @Override是JDK5 就已经有了,但有个...

iphoenix
2016/10/10
5
0
eclipse @override的统一处理

第一种解决方案: @Override是JDK5 就已经有了,但有个小小的Bug,就是不支持对接口的实现,认为这不是Override 而JDK6 修正了这个Bug,无论是对父类的方法覆盖还是对接口的实现都可以加上@...

DURONG
2013/03/21
0
0
Eclipse常见错误以及解决方案

Eclipse常见错误以及解决方案 错误一 :The type java.lang.Object cannot be resolved.It is indirectly referenced from required.class files 解决方案 : 出现以上信息的原因是因为你装了...

messi_10
2015/11/27
30
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊storm的AggregateProcessor的execute及finishBatch方法

序 本文主要研究一下storm的AggregateProcessor的execute及finishBatch方法 实例 TridentTopology topology = new TridentTopology(); topology.newStream("spout1", spout......

go4it
39分钟前
1
0
大数据教程(7.5)hadoop中内置rpc框架的使用教程

博主上一篇博客分享了hadoop客户端java API的使用,本章节带领小伙伴们一起来体验下hadoop的内置rpc框架。首先,由于hadoop的内置rpc框架的设计目的是为了内部的组件提供rpc访问的功能,并不...

em_aaron
今天
1
0
CentOS7+git+github创建Python开发环境

1.准备CentOS7 (1)下载VMware Workstation https://pan.baidu.com/s/1miFU8mk (2)下载CentOS7镜像 https://mirrors.aliyun.com/centos/ (3)安装CentOS7系统 http://blog.51cto.com/fengyuns......

枫叶云
昨天
1
0
利用ibeetl 实现selectpicker 的三级联动

1. js 直接写在html页面上面,ibeetl 就可以动态地利用后台传上来的model List ,不需要每次点击都要ajax请求后台 2. 使用selectpicker 的时候,除了对selecct option的动态处理后,还需要 $("#...

donald121
昨天
1
0
Android SELinux avc dennied权限问题解决方法

1. 概述 SELinux是Google从android 5.0开始,强制引入的一套非常严格的权限管理机制,主要用于增强系统的安全性。 然而,在开发中,我们经常会遇到由于SELinux造成的各种权限不足,即使拥有“...

TreasureWe
昨天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部