6.12:函数式编程
java8对接口的改变:
1.增加了default方法和static方法,这两种方法完全可以有方法体
2.default方法属于实例,static方法属于类(接口)
3.接口里面的静态方法不会被继承,静态变量会被继承下来
4.如果一个类实现了多个接口,并且这些接口互相之间没有继承关系,同时存在相同的默认方法,会报错:不相关默认值
如果多个接口接口有继承关系,默认方法会被子接口覆盖
5.如果遇到有多个继承,并且有相同的默认方法,实现类可以通过特殊语法指定要访问哪个接口的方法。在实现类或子接口中重写默认方法,在方法里面:
<接口>.super.<方法名>([参数])
6.如果一个接口只有一个抽象方法(包括继承的),该接口是一个函数式接口,函数式接口可以使用lambda表达式实现
7.如果接口里面使用FunctionalInterface注解限定接口里面只能有一个抽象方法
interface testFunctionalInterface {
//接口中只有一个抽象方法,默认就是函数式接口
static void test1(){}
}
//没有方法的接口就是普通的接口,这种接口通常用于标记使用,比如java的序列化
interface testFunctionalInterface2{}
//使用@FunctionalInterface注解的接口有且仅有一个抽象方法
@FunctionalInterface
interface testFunctionalInterface3{
void test1();
static void test5(){}
default void test6(){}
}
//报错:找到多个抽象方法不是函数式接口,不能使用@FunctionalInterface注解
//@FunctionalInterface
//interface testFunctionalInterface4{
// void test1();
// void test2();
//}
java8接口的变化:
1.静态方法和默认放啊,方法前面使用static或者default进行修饰,这种方法必须有方法体
2.如果一个接口只有一个抽象方法,默认自动编程函数式接口
3.如果使用了FunctionalInterface对接口进行注解,该接口只能有能有一个抽象方法(可以有同时有static和default方法,但抽象方法唯一)