java8新特性探究(二)深入解析默认方法-java开发java经验技巧

java8新特性探究(二)深入解析默认方法-java开发java经验技巧

ID:30776412

大小:75.47 KB

页数:3页

时间:2019-01-03

java8新特性探究(二)深入解析默认方法-java开发java经验技巧_第1页
java8新特性探究(二)深入解析默认方法-java开发java经验技巧_第2页
java8新特性探究(二)深入解析默认方法-java开发java经验技巧_第3页
资源描述:

《java8新特性探究(二)深入解析默认方法-java开发java经验技巧》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、Java8新特性探究(二)深入解析默认方法-编程开发技术Java8新特性探究(二)深入解析默认方法原文出处:成熟的毛毛虫的博客上篇讲了?lambda表达式的语法,但只是7JEP126?特性的一部分,另一部分就是默认方法(也称为虚拟扩展方法或防护方法)什么是默认方法,为什么要有默认方法简单说,就是接口可以有实现方法,而且不需耍实现类去实现其方法。只需在方法名前而加个default关键字即可。为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口吋候,需要修改全

2、部实现该接口的类,口丽的java8之询的集合框架没冇foreach方法,通常能想到的解决办法是在JDK里给相关的接口添加新的方法及实现。然而,对于已经发布的版本,是没法在给接口添加新方法的同时不影响已冇的实现。所以引进的默认方法。他们的目的是为了解决接口的修改与现有的实现不兼容的问题。简单的例子一个接口A,Clazz类实现了接口AopublicinterfaceA{defaultvoidfoo(){System,out.printin("CallingA.foo()〃);}publicclassClazzi

3、mplementsA{publicstaticvoidmain(String[]args){Clazzclazz二newClazz();clazz.foo();//调用A.foo()代码是可以编译的,即使Clazz类并没有实现foo()方法。在接口A中提供了foo()方法的默认实现。java8抽象类与接口对比这一个功能特性出來后,很多同学都反应了,java8的接口都有实现方法了,跟抽象类还有什么区别?其实还是有的,请看下表对比。。相同点1.都是抽彖类型;不同点1•捕象类不可以多重继承,接口可以(无论是多重类

4、型继承还是多重行为继承);2.都可以有实现方法(以前接口不行);2.抽象类和接口所反映出的设计理念不同。其实抽象类表示的是”is-「关系,接口表示的是"like-a”关系;3.都可以不需要实现类或者继承者去实现所有方法,(以前不行,现在接口屮默认方法3•接口中定义的变量默认是publicstaticfinal型,且必须给其初值,所以实现类屮不能改变莫值;不需要实现者实现)抽彖类中的变量默认是friendly型,其值可以在子类屮重新定义,也可以重新赋值。多重继承的冲突说明由于同一个方法可以从不同接口引入,自然

5、而然的会有冲突的现象,默认方法判断冲突的规则如下:1•一个声明在类里面的方法优先于任何默认方法(classesalwayswin)2•否则,则会优先选取最具体的实现,比如下面的例子B重写了A的hello方法。publicinterfacedefaultvoidA{hello(){publicinterfacedefaultvoidBextendshello(){Systern.out.printin(riHelloWorldfromA");A{Systern.out.printin(riHelloWorld

6、fromBf,);ACpublicclassCimplementsA{publicstaticvoidmain(String...args){newC().hello();输出结果是:HelloWorldfromB如果想调用A的默认函数,则用到新语法X.super,ni(…),下面修改C类,实现A接口,重写一个hello方法,如下所示:publicclassCimplementsA{©Overridepublicvoidhello(){A.super・hclloO;}publicstaticvoidmain

7、(String[]args){newC().hello();输出结果是:HelloWorldfromA总结默认方法给予我们修改接口而不破坏原來的实现类的结构提供了便利,0java8的集合框架已经大量使用了默认方法來改进了,当我们最终开始使用Java8的lambdas表达式时,提供给我们一个平滑的过渡体验。也许将来我们会在API设计中看到更多的默认方法的应用。跟上篇博文结合起来,就是JEP126的全部了,后面还有54个特性等着我们去探究,为了让大家比较深刻了解lambda,学以致用,下一篇还是lambda的内

8、容,预告一下下篇的标题:《Java8特性探究(三)解开lambda表达式最强作用的神秘面纱》,第二个特性将从第四篇开始,谢谢大家支持,敬请期待。。。

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。