标签:接口 default void 默认 res log 比较 而且 编译
在Java SE 8之前,interface只是事物的抽象,用来定义统一的抽象事物和描述事物的抽象行为和属性。
但是在Java SE 8中,增加了可以在interface中增加默认实现的行为和事物的静态行为。
java迭代了如此多的版本且主要采用的都是演化的思想而非重构(为了保证与历史的兼容性)。
这样就容易出现很多比较难以处理的问题,接口在发布之后就已经被定型,除非我们能够一次性更新所有该接口的实现。比如某个历史接口有很多实现,需要在历史接口中增加一个行为,那么久需要在它的所有实现中去实现了该行为,那么无疑是阻碍了演化,向接口中增加默认方法能使得接口仍能逐步发生演化,这也符合自然事物一直在发展的定律。
而且子啊Java SE 8中引入了函数式接口,使用接口中的默认方法和静态方法 便能够突破函数式接口的单个方法限制。
接口中的默认方法
public interface TestDefaultMethodApi {
default void print(String msg) {
System.out.println(msg);
}
}
接口中的静态方法
public interface TestStaticMethodApi {
static void utilMethod(String msg) {
System.out.println(msg);
}
}
默认方法:
静态方法:
接口中定义了默认方法,那么其实现中都会有该默认方法,但是默认方法是不需要去实现的,如果实现中没有覆盖接口中定义的默认方法,那么实现中调用默认方法表现出的行为能力即接口中实现的默认方法
具体的实现中可以覆盖默认行为的实现,如:Vector向量覆盖了Collection中的removeIf
默认方法只能定义在接口中,如果被定义在其他地方,则编译错误
深入理解Java 8 Lambda(语言篇——lambda,方法引用,目标类型和默认方法)
标签:接口 default void 默认 res log 比较 而且 编译
原文地址:https://www.cnblogs.com/lxyit/p/9442390.html