一.Java8对接口的改变
1.接口增加了default方法和static方法,这两种方法可以有方法体
2.default方法属于实例,static属于类
3.接口里面的静态方法不会被继承(直接调用类型加方法名称调用静态方法),静态变量会被继承
4.如果一个类实现了多个接口(defalut定义的接口),并且这些接口互相之间没有继承关系,同时存在相同的默认方法,
会报错,不相关默认值错误
如果有继承关系,那么会执行子接口方法
5.如果遇到有多个继承,并且有相同的默认方法,实现类可以通过特殊语法指定要访问哪个接口的方法。
在实现类、子接口中重写默认(defalut)方法,在方法里面写:
<接口>.super.<方法名>([参数])
6.如果一个接口只有一个抽象方法(包括继承的),该接口是一个函数接口
可以使用lambo表达式实现
7.如果接口里面使用 FunctionalInterface 注解限定接口里卖弄只能有一个抽象方法 有且只有一个,但是可以有defalut方法
二.lambo表达式
1.只能针对函数式接口使用(也就是说只能对)
以前我们使用匿名内部类进行
Text text = new Text(){
public void test1(){
System.out.println("使用匿名内部类");
}
};
text.test1();
lambo表达式无需写参数类型,如果方法体只有一句话,那么可以省略大括号以及分号
test test = (a)->{
System.out.println("我是lambo表达式");
};
注意点:
1.如果形参列表是空的,只需保留()即可
2.如果没有返回值,只需要在{}写执行语句即可
3.如果几口的抽象方法只有一个形参,()可以省略,只需要参数的名称即可。
4.如果执行语句只有一行,可以省略{},但如果有返回值,有点特殊
5.形参列表的数据类型自动推断,只要参数名称。
6.如果函数式接口的方法有返回值,需要要给定返回值,如果执行语句只有一行代码,九二一省略大括号。但必须同时省略return
方法的引用