1.默认方法的使用模式:
-- 可选方法
类实现了接口,但是刻意地将一些方法留白。
public interface Iterator<E> { boolean hasNext(); E next(); default void remove() { throw new UnsupportedOperationException("remove"); } }
-- 行为的多继承
让类从多个来源重用代码。
-- 继承多个接口;
-- 利用正交方法的精简接口:
public interface Resizable { int getWidth(); int getHeight(); void setWidth(int width); void setHeight(int height); void setAbsoluteSize(int width, int height); default void setRelativeSize(int wFactor, int hFactor) { setAbsoluteSize(getWidth() / wFactor, getHeight() / hFactor); } }
2.解决冲突的规则
冲突的场景:一个类实现了多个接口和父类的方法而它们使用的却是同样的函数签名。
规则:
(1)类中的方法优先级最高。类或父类中声明的方法优先级高于任何声明为默认方法的优先级。
(2)如果无法依据第一条进行判断,那么子接口的优先级更高:函数签名相同时,优先级选择拥有最具体实现的默认方法的接口,如果B继承了A,那么B就比A更具体。
(3)最后,如果还是无法判断,继承了多个接口的类必须通过显式覆盖和调用期望的方法,显式地选择使用哪一个默认方法的实现。(X.super().method(...))
原文地址:http://blog.51cto.com/turnsole/2120844