在讲解接口定义加强之前,首先看看分析一个实际问题。
当一个接口的子类经过发展后,形成众多后代,如果此时发现接口中应该还有新加一个方法,此时怎么办?
- 接口中新增一个方法声明,然后所有子类粘贴无数次;
- 或者,如果所有的子类都使用了抽象类,那么就要对所有的子类考虑继承关系。
造成这个尴尬局面的原因是:接口只是声明了方法,而没有具体的实现。随着时间的推进,如果出现了上述问题,该接口就将作废。
JDK8中为了解决上述问题,专门提供了两类新的结构:
- 通过
default
定义普通方法,需要通过对象调用 - 使用
static
来定义普通方法,可以通过类名进行调用
新功能的接口更加类似抽象类了,区别在于,接口依然可以实现多继承,但是抽象类却只能单继承。
总结
- 最好不要在程序设计初期就进行接口定义加强的使用,这样破坏了接口的设计规范;
- 接口定义加强是由于时间一长,许多支持出现问题时候,才提出的一种挽救性的操作,不属于标准设计。