我们都知道接口里的变量默认隐含类型是public static final,也是就是说是常量。而方法默认类型是public abstract,所以接口的方法都是抽象方法,但是事实真的是这样吗?

我的PC上安装的是jdk1.8,一次编写接口代码的时候,看到接口里的方法竟然可以定义为default类型,很好奇,就查看了一下这个default关键字究竟有什么含义,原来是jdk1.8的接口新特性,可以查看下面的一篇文章:

(1)增加default方法。对已有的接口,如果想对接口增加一个新方法,那么需要对实现该接口的所有类进行修改,如果接口实的现类很多,就会带来很大的工作量,而且还很容易破坏以前的代码,带来一些问题。如果把新的方法定义为default方法,就可以避免对其他实现类的修改。
但是,这样也会有一个问题:如果接口A和接口B里有一个名字相同并且参数列表也相同的方法都被定义为了default方法,那么当类C实现接口A和接口B的时候就会在编译时报错。由于是编译时报错,这个完全可以接受,当类C成功实现了
接口A和接口B以后(没有冲突),类C的实例就可以调用接口A和接口B里的default方法了。

(2)新增了static函数。static修饰的方法也是非抽象方法,有自己的方法体,在接口中定义一个静态方法,该方法可以直接用< 接口名.方法名() >的形式来调用。相当于调用类的静态方法一样,给方法的调用带来了方便。

最新文章

  1. Centos7下面配置静态IP
  2. Google Map API V3开发(2)
  3. DB
  4. C++ 11 Template ... 与Decltype 测试
  5. 多个Python环境的构建:基于virtualenv 包
  6. 屏幕截图、录像FastStone Capture
  7. wamp集成环境开启虚拟主机多站点功能
  8. 【转】分享10VPN
  9. MySQL数据库事务剖析
  10. SQLServer 取小时
  11. Android RatingBar自定义替换系统图片
  12. 理解jquery的.on()方法
  13. JSP EL
  14. C#中byte[] 与指针
  15. 对java的Thread的理解
  16. MQ在高并发环境下,如果队列满了,如何防止消息丢失?
  17. 11)django-ORM(操作增删改查)
  18. 16-(基础入门篇)GPRS(Air202)关于多个文件中的变量调用和定时器
  19. StringBuild类
  20. OpenNebula学习第一节OpenNebula Front-end Installation

热门文章

  1. 利用自定义动画 animate() 方法,实现某图书网站中“近 7 日畅销榜”中的图书无缝垂直向上滚动特效:当光标移入到图书上时,停止滚动,鼠标移开时,继续滚动
  2. EMQX源码编译过程
  3. versions-maven-plugin插件批量修改版本号
  4. STC8H开发(一): 在Keil5中配置和使用FwLib_STC8封装库(图文详解)
  5. POJ 2442 Sequence堆 优先队列
  6. spring-Ioc(二)学习笔记
  7. spring5无法在控制台打印日志的原因
  8. centOS8安装java14
  9. Centos 7.6关闭selinux
  10. Visual Studio 设置背景图片主题(所有版本设置方法)