Java8的接口现在可以实现方法了。默认方法(带default修饰的方法)的好处是可以为接口添加新的默认方法,而不会破坏接口的实现。
——————————————————————————————————————————
这样任何一个实现了带有默认方法接口的类都会自动继承默认方法实现,无需再写直接留白
interface Iterator<T>{//Iterator接口就为remove方法提供了一个默认实现
boolean hasNext();
T next();
default void remove(){
throw new UnsupportedOerationException();
}
}
//可能是早期包中的例子:
@FunctionalInterface
public interface Iterable<T> {
Iterator<T> iterator();
default void forEach(Consumer<? super T> action) {
Objects.requireNonNull(action);
for (T t : this) {
action.accept(t);
}
}
}
经验或者说规则:
1.当继承的父类和实现的接口中有相同的方法时,优先使用父类的方法。
——————————————————————————————————————————
2.当接口的父接口中也有同样的默认方法时,就近原则调用子接口的方法。
——————————————————————————————————————————
3.当实现的多个接口中有相同签名的方法时,必须在实现类中通过重写方法解决冲突问题,否者无法通过编译,在重写的方法中可以通过 接口名.super.方法名(); 的方式显示调用需要的方法。
@Override
public void methods() {
B.super.methods();//这样指明调用
}
默认表达式的主要目标是使标准JDK接口得以进化,并且当我们最终开始使用Java 8的lambdas表达式时,提供给我们一个平滑的过渡体验。
感谢分享:罗罗的奇幻之旅 java8接口中的默认方法
lwei 翻译的:Java 8 详解之默认方法 【已翻译100%】
fool77 的 关于java8接口中默认方法的使用 例子小但是说明问题