博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java 8——接口中个的默认方法和静态方法
阅读量:5892 次
发布时间:2019-06-19

本文共 1022 字,大约阅读时间需要 3 分钟。

在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性。

但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静态行为。

一.为什么?

java迭代了如此多的版本且主要采用的都是演化的思想而非重构(为了保证与历史的兼容性)。

这样就容易出现很多比较难以处理的问题,接口在发布之后就已经被定型,除非我们能够一次性更新所有该接口的实现。比如某个历史接口有很多实现,需要在历史接口中增加一个行为,那么久需要在它的所有实现中去实现了该行为,那么无疑是阻碍了演化,向接口中增加默认方法能使得接口仍能逐步发生演化,这也符合自然事物一直在发展的定律。

而且子啊Java SE 8中引入了函数式接口,使用接口中的默认方法和静态方法 便能够突破函数式接口的单个方法限制。

二.示例

接口中的默认方法

public interface TestDefaultMethodApi {    default void print(String msg) {        System.out.println(msg);    }}

接口中的静态方法

public interface TestStaticMethodApi {    static void utilMethod(String msg) {        System.out.println(msg);    }}

三.用途

默认方法:

  1. 可以在函数式接口中使用
  2. 可以将公共的行为抽象为默认方法,所有实现中都会有该默认方法——这个可以参考Collection
  3. 可以在已经发布的接口中添加默认方法,让接口具有新的行为,能够继续演化发展

静态方法:

  1. 静态更多属性接口或者类型的本身行为,所已经可将一些近与接口耦合的工具方法作为静态方法,实现高内聚

四.使用的注意点

  • 接口中定义了默认方法,那么其实现中都会有该默认方法,但是默认方法是不需要去实现的,如果实现中没有覆盖接口中定义的默认方法,那么实现中调用默认方法表现出的行为能力即接口中实现的默认方法

  • 具体的实现中可以覆盖默认行为的实现,如:Vector向量覆盖了Collection中的removeIf

  • 默认方法只能定义在接口中,如果被定义在其他地方,则编译错误

参考

转载于:https://www.cnblogs.com/lxyit/p/9442390.html

你可能感兴趣的文章
Silverlight资源(转自蓝色理想)
查看>>
ABP理论学习之多租户
查看>>
Neutron 理解 (8): Neutron 是如何实现虚机防火墙的 [How Neutron Implements Security Group]...
查看>>
TP-Link wr703N 使用华为HiLink系列上网卡的设置【转】
查看>>
ASP.NET MVC5+EF6+EasyUI 后台管理系统(4)-创建项目解决方案
查看>>
IBM云的商务动作之我见(2):IBM 和 VMware 战略合作推进混合云
查看>>
阿里云--域名,主机,备案都配置好了,就是不能访问网站的解决方案
查看>>
使用Enyim.Caching访问阿里云的OCS
查看>>
使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据的问题
查看>>
预付费转码时长包
查看>>
r语言 连接 oracle数据库
查看>>
自然语言处理工具LTP语言云调用方法
查看>>
ARM Linux 3.x的设备树(Device Tree)【转】
查看>>
对 makefile 中 eval 函数的学习体会
查看>>
可拖动的层DIV的完整源代码【转】
查看>>
ASP.NET 常见问题 和 网页上加上百度搜索
查看>>
1.4 Ecosystem官网剖析(博主推荐)
查看>>
STK 10.1.3
查看>>
浓缩的才是精华:浅析GIF格式图片的存储和压缩(转)
查看>>
VS2008无法切换到视图设计器
查看>>