这种构造的主要目的是保持向后兼容性。在Java语言中添加闭包是一个重大的更改,需要对其进行更新以充分利用此功能。例如,
Collection在Java
8中将有诸如
forEach()与lambda结合使用的方法。简单地将这些方法添加到预先存在的
Collection接口将不可行,因为它将破坏向后兼容性。我用Java
7实现的类
Collection将不再编译,因为它缺少这些方法。因此,这些方法是通过“默认”实现引入的。如果您了解Scala,那么您会发现Java
interface越来越像Scala
trait。
至于接口与抽象类,在Java 8中两者仍然 不同
。例如,您仍然不能在接口中有构造函数。因此,这两种方法本身并不是“概念上等效的”。抽象类的结构更复杂,可以具有与之关联的状态,而接口则不能。您应该在程序的上下文中使用更有意义的方法,就像在Java
7及更低版本中一样。



