@Override在jdk5下用在interface上编译不过
@Override在jdk5下用在interface上编译不过
谦谦君子 发表于4年前
@Override在jdk5下用在interface上编译不过
  • 发表于 4年前
  • 阅读 679
  • 收藏 0
  • 点赞 0
  • 评论 4

标题:腾讯云 新注册用户域名抢购1元起>>>   

直接上代码吧,下面这段代码在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以后都可以编译通过。
共有 人打赏支持
粉丝 35
博文 55
码字总数 42647
评论 (4)
红薯
JDK 5 不支持接口上的 @Override
mononite
@Override在JDK5引入的时候,要解决的问题是避免重写父类方法出现错误,比如拼写错误,或者是用了错误的方法签名,如果没有@Override编译器是没办法提示出错的。这个问题对接口来说是不存在的,没有正确重写接口的方法,没有@Override也能报错。所以JDK5里不允许在接口方法加@Override应该是刻意的。
但在实际项目里,接口里的方法不仅会添加和修改,也会删除,如果删除了接口已有的方法,那没有简单的办法去删除已有实现类中的多余方法,而接口方法如果能用@Override,那就很容易了,所以JDK6里允许@Override用在接口方法上,是更务实的一种做法,也不难理解。
谦谦君子

引用来自“mononite”的评论

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

解释得很详细,受教了,谢谢~~
谦谦君子

引用来自“红薯”的评论

JDK 5 不支持接口上的 @Override

嗯,谢谢老大的回复哈~~
×
谦谦君子
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: