文档章节

@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以后都可以编译通过。

© 著作权归作者所有

共有 人打赏支持
谦谦君子
粉丝 37
博文 61
码字总数 56919
作品 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

没有更多内容

加载失败,请刷新页面

加载更多

如何限制用户仅通过HTTPS方式访问OSS?

一、当前存在的问题 当前OSS支持用户使用HTTPS/HTTP协议访问Bucket。但由于HTTP存在安全漏洞。大型企业客户都要求使用HTTPS方式访问OSS,并且拒绝HTTP访问请求。 目前OSS可以通过RAM policy方...

阿里云官方博客
7分钟前
0
0
详解深度学习之经典网络架构——LeNet

一、基本简介 LeNet-5出自论文Gradient-Based Learning Applied to Document Recognition,是一种用于手写体字符识别的非常高效的卷积神经网络。 二、LeNet网络的基本结构 LeNet5 这个网络虽...

AI女神
10分钟前
0
0
日志服务Python消费组实战(二):实时分发数据

场景目标 使用日志服务的Web-tracking、logtail(文件极简)、syslog等收集上来的日志经常存在各种各样的格式,我们需要针对特定的日志(例如topic)进行一定的分发到特定的logstore中处理和...

阿里云云栖社区
11分钟前
1
0
LVM 增加磁盘扩容

sudo parted /dev/sdeparted> mklabel gptparted> mkpart primary lvm ext4 %0 %100parted> printsudo lvmlvm> pvcreate /dev/sde1lvm> vgextend vg-data /dev/sde1lvm> lve......

仪山湖
14分钟前
0
0
Linux挂载本地iso镜像,不联网使用yum命令

上传iso镜像文件到/mnt 目录下 在/mnt目录下创建Server目录 mkdir Server 备份 /etc/yum.repos.d/目录下的repo文件 cd /etc/yum.repos.dmkdir repobakmv *.repo repobak/ 挂载本地iso文件...

AustinYe
15分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部