在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

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

参考

深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)

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

Java 8——接口中个的默认方法和静态方法相关推荐

  1. Java接口、implements关键字、接口中抽象方法,默认方法,静态方法,私有方法,常量、final关键字

    接口: 接口是Java语言中一种引用类型,是方法的集合,如果说类的内部封装了成员变量.构造方法和成员方法,那么 接口的内部主要就是封装了方法,包含抽象方法(JDK 7及以前),默认方法和静态方法(JD ...

  2. 【Java 面向对象】基础、Java程序的内存划分、嵌套类(内部类、静态嵌套类)、局部类、接口的升级问题(默认方法、静态方法)、instanceof

    面向对象 对象的内存 复杂对象的内存 对象数组的内存 思考:方法存储在哪里? Java程序的内存划分 this.super 注解(Annotation) 访问控制(Access Control) to ...

  3. Java8新特性总结 - 1.接口新增默认方法和静态方法

    所有示例代码打包下载 : 点击打开链接 Java8新特性 :  接口新增默认方法和静态方法 Optional类 Lambda表达式 方法引用 Stream API - 函数式操作流元素集合 Date/ ...

  4. 超详细解读Java接口:模块通信协议以及默认方法和静态方法

    有不少学习Java的同学一直有个疑问,不仅在初学者中很普遍,连许多经验丰富的老手也很难表述清楚,那就是:Java接口到底是什么? 来看看孙鑫老师的讲解,本文干货含量拉满,这可能是距离你深入理解Java ...

  5. Java8新特性Optional、接口中的默认方法与静态方法

    Optional Optional 类(java.util.Optional) 是一个容器类,代表一个值存在或不存在,原来用 null 表示一个值不存在,现在 Optional 可以更好的表达这个概念 ...

  6. java private 接口_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  7. Java私有方法解释_java接口中 定义 private 私有方法

    在传统的Java编程中,被广为人知的一个知识点是:java Interface接口中不能定义private私有方法.只允许我们定义public访问权限的方法.抽象方法或静态方法.但是从Java 9 开 ...

  8. 接口中默认方法和静态方法_接口中的默认方法和静态方法

    接口中默认方法和静态方法 在我们最初的Java 8支持公告中,我们特别提到了流的缺乏,但完全错过了默认/静态本机接口不起作用的事实. 现在,由于有一个警惕的社区成员指出了这一问题,因此此问题已得到解决 ...

  9. JDK8新特性之接口默认方法与静态方法

    接口默认方法与静态方法 有这样一些场景,如果一个接口要添加一个方法,那所有的接口实现类都要去实现,而某些实现类根本就不需要实现这个方法也要写一个空实现,所以接口默认方法就是为了解决这个问题. 接口静态 ...

最新文章

  1. 爬取小说 spider
  2. 记一次内存溢出的分析经历——使用thrift
  3. 在centOS7中装mysql_在 CentOS7 上安装 MySQL5.7
  4. centos7 mysql启动后端口_centos7 修改mysql5.7默认端口后启动异常
  5. C 语言实例 - 二进制与十进制相互转换
  6. JAVA学习 第5天
  7. rgba和hex之间转换
  8. 超赞!终于有网友用Java实现了第三方qq账号登录...
  9. FileZilla中文乱码解决方法 与 设置界面为中文
  10. 未来教育计算机二级学生文档,未来教育计算机二级MS-office题库(解题步骤)题库.docx...
  11. 什么是网络流量劫持?
  12. windows 下 tomcat 开机自启动
  13. 不同范数下的余弦定理_平行四边形的认识视频
  14. 天池- IJCAI-18 阿里妈妈搜索广告转化预测(完整版代码,数据集等总结)
  15. 实变函数笔记——对数与基数
  16. [翻译]CryEngine3中ClothShader详解
  17. matlab自动调焦,光学系统离焦对自动调焦评价函数的影响
  18. 云上城之个服务器维护时间,云上城之歌开服时间表 官方最新开服情况
  19. 夏季晒黑如何变白?店湾妹教你几招,皮肤回归白嫩
  20. FBI 网站被入侵 ? 官方称是黑客在造谣

热门文章

  1. node生成uuid
  2. 数据库中常见的面试问题(转)
  3. Apache Arrow 内存数据
  4. 每天CookBook之Python-048
  5. sscanf和sprintf的高级用法
  6. javascript 请求web service
  7. spock做post请求get请求,在springboot环境下使用gradle构建工具的demo,IDEA的开发工具
  8. java开发环境以及数据类型
  9. c语言经典游戏,C语言——经典小游戏——打砖块
  10. python正则匹配统计_用Python正则表达式搜索统计命令行管道中的所有数字