1.接口的默认方法
1.1传统的方法(之前的)
在java8之前java中接口里面的方法默认都是 public abstract 修饰的抽象方法并且没有方法体
1.2 static方法
- 使用static修饰接口中的方法并且必须有主体
- 接口的static方法只能被接口本身调用
- 接口的static方法不能被子接口继承
- 接口的static方法不能够被实现类覆写及直接调用
1.3 default方法
学习了上面的static方法之后,这里模仿来学习
- default方法必须有主体
- default方法可以被实现类覆写
- default方法可以被子接口继承
- default方法可以视作是接口定义时的初始化操作
2.函数式接口
2.1什么是函数式接口
函数式接口就是一个有且仅有一个抽象方法,但是可以有多个非抽象方法的接口。函数式接口可以被隐式转化为lambda表达式
2.2函数式接口API
jdk1.8之前已有的函数式接口
- java.lang.Runnable
- java.util.concurrent.Callable
- java.util.Comparator
- java.io.FileFilter
- java.io.file.PathMatcher
- ...
jdk 1.8新增的函数接口
java.util.function 此包中包含了很多类,用来支持JAVA的函数式编程
2.3函数式接口注解
@functionalInterface
我们在函数式接口上面加上此注解后,里面就只能够有一个抽象方法了,当然不加此注解且只有一个抽象方法的接口也是函数式接口,只是没有限定提示而已。
3.Lambda表达式
3.1 什么是Lambda表达式
简单来说,可以看成是匿名内部类的简写,使用Lambda表达式时,接口必须是函数式接口(有且仅有一个抽象方法)。
3.2 Lambda表达式的语法
基本语法:
<函数接口名> <变量名> = (参数1,参数2...)->{
//方法体
}
特点说明:(参数1,参数2 ...)表示参数列表;
->表示连接符
{}内部是方法体
- =右边的类型会根据左边的函数式接口类型自动判断
- 如果形参列表为空,