典型的例子是它在Java 8中引入方法的Iterable接口中的使用default stream().这样,所有Iterables都stream自动地继承了已经被强制化的方法.这为API演变提供了支持,而不会破坏已有的代码.
假设您创建了一个新的Collection框架,定义它可能是合理的:
interface MyCollection {
int size();
default boolean isEmpty() { return size() == 0; }
}
Run Code Online (Sandbox Code Playgroud)
通过这样做,您可以避免isEmpty在所有实现类中重新定义完全相同的方式的痛苦,同时允许特定类在需要时以不同方式实现它.
这可以在抽象类中完成,但这使您可以删除层次结构中的一个层,并获得接口的继承灵活性:类可以继承多个接口,但只能继承一个抽象类.
另请参见:使用默认方法的接口与Java 8中的Abstract类.