前言
jdk8接口中新增了些东西,我们回过头重新审视一下jdk中的普通接口的样子。
下面是Map接口的成员截图
Map接口有三部分
一、红色部分
也就是我们常用的API(Entry是Map存储数据的一个数据结构),这在jdk8之前就有,没什么可说的。
二、紫色部分
也是jdk8之前也有的。这里可能会有疑问:
- 1. 这里的equals和hashCode是不是Object类的
- 2. 如果是Object类的,为什么这里还是要再写一遍(可以查一下jdk里的其他API接口,基本都有),所有类不都是默认继承Object的,都可以重写这两个方法。
- 3. 有前两个疑问,同时也意味着会想到:接口也继承Object?
答:
- equals和hashCode是Object类的
- 这可以认为是一种写法规范(是不是有点牵强。。)
- 接口是一种特殊的类,所以也默认继承Object
三、绿色部分
jdk8新增的特性:接口允许加默认方法。为什么?
答: 为了接口向下兼容。
接口不同与实现类,以前写的不好,我后面可以修改。以前写的方法想废弃,我后面就新增新的方法。以前写的不完善,想新增新方法,就新增新方法。
这些需求,在实现类里都可以很方便的实现,而不影响老代码。但接口不行,增、删、改 全都会牵一发动全身,接口被调用的越多,修改起来成本就越大。而对于jdk开发人员来说,修改更是不可能,修改一下接口,java就无法向下兼容了。但接口开发人员(包括jdk里的和我们普通的程序)写的老接口想修改但又不想影响老代码怎么办? 就是加default方法,新的实现类可以去重写,也可以直接用,老的实现类直接无视这些默认方法。 完美~