Daisy Donergue 多莫歌·黛西
“By woman, you mean her?” 她也能叫女人?
Java 8在13年9月发布,写这篇博文的时间已经是17年12月份了。来的有点晚,但是有必要补一下1.8的特性。
一、基本介绍
Java 8中接口里已经完全可以定义静态方法了. 举一个比较普遍的例子就是在java类库中, 对于一些接口如Foo, 都会有一个有静态方法的工具类Foos 来生成或者配合Foo对象实例来使用. 既然静态方法可以存在于接口当中, 那么大多数情况下 Foos工具类完全可以使用接口中的公共方法来代理 (或者将Foos置成package-private).
上边的话理解起来就是接口中可以使用default关键字来修饰接口中的方法,打破了接口中不能写方法实现的弊端,也对原来的概念有了极大的冲击,因为之前一直在讲:“接口中不能有方法的实现”,but not now。所以现在更容易混淆的概念是:可以写方法实现可以多继承的接口,可以写方法实现但只能单继承的抽象类。所以再被问起接口中是否可以写实现,你回答的就能直接体现出你是否了解过1.8。代码如下:
interface Formula { //接口中实现了sqrt的默认算法,只需要使用 default关键字即可,在实现类中只需要实现calculate方法即可使用calculate和sqrt两个方法 double calculate(int a); default double sqrt(int a) { return Math.sqrt(a); } }
在过去,java类库的接口中添加方法基本上是不可能的. 在接口中添加方法意味着破坏了实现了这个接口的代码。弥补了Java一直以来不支持多继承,但支持多继承的接口不能写方法实现的缺点。但是现在, 只要能够提供一个正确明智的默认的方法的实现, java类库的维护者就可以在接口中添加方法。
二、具体使用中的问题
1、接口多继承情况下,同时继承的两个或多个接口中有同样的方法进行的实现,那么实现类中怎么不冲突?在不指明实现类方法指向的是继承自哪个接口的情况下,编译时会直接报错。所以解决方案就是,
①在实现类中指明使用了哪个父接口的方法,
②实现类中重写方法
2、同时继承了接口和基类,而接口和基类中的同名方法都进行了实现,如何避免冲突?
当同时继承了接口和基类,方法冲突时。实现类默认继承基类中的方法,也就是说基类优先级比接口高。当然也可以选择重写。
“You John Ruth The Hangman” 绞刑者鲁斯·约翰
“When the Hangman catches you, you hang.”当被绞刑者抓住了,你肯定会被绞死
Mannix‘s Marauders -Chris Mannix 曼尼克斯掠夺者 曼尼克斯·克里斯
“I‘m the new sheriff of Red Rock.” “我是红石镇的新任警长”
Oswaldo Mobray 莫博瑞·奥斯瓦尔多
“I‘m Oswaldo Mobray, the hangman in these parts.” “我是莫博瑞·奥斯瓦尔多,这片地区的绞刑官。”
Joe Gage 盖奇·乔
“First time in my life I made a pretty penny.And, figured I‘d come home and spend time with my mothr for Christmas.”
“有生以来第一次挣了很多钱,于是,我想回家陪陪我妈一起过圣诞节”
"General" 我是个将军
“ You, sir a hyena. I hava no wish to speak to you.” “你就是一个土狗,你不配跟我说话”
Jody Domingre 多莫歌·乔迪
“How you doing, dummy?” 你还好吗,傻瓜
参考链接:
http://www.oschina.net/translate/everything-about-java-8
https://www.cnblogs.com/zhouxuanyu/p/4536514.html
图片来源:八恶人(movie)