Java8中的默认方法和Lambda的使用
接口默认方法
在Java8中,接口允许拥有带有方法实现的默认方法,在方法前使用关键字default
来区别于普通的抽象方法。
一个接口可以有多个默认方法,也可以只有默认方法而不含有传统的抽象方法,同时,默认方法不强制子类重写,并且可以像类的成员方法一样被继承。
例如:
interface Test<T> {
default T abcd(T a) {
return a;
}
default T abc(T a) {
return a;
}
}
可以让一个类继承多个带有抽象方法的接口来实现多重继承。
当一个类继承了两个带有相同函数签名的默认方法的接口时,编译时会报错,这时,需要在同时继承了这两个接口的类中重写引发冲突的默认方法。
例如:
//接口Test1中含有默认方法"T abc(T a)"
interface Test1<T> {
default T abc(T a) {
return a;
}
}
//接口Test2中也含有默认方法"T abc(T a)
interface Test2<T> {
default T abc(T a) {
return a;
}
}
//类Test同时实现接口test1和test2
class Test<T> implements Test1<T>, Test2<T> {
@Override
public T abc(T a) {
......
return ...
}
}
如果你想在重写的方法中直接使用原先接口中的某个默认方法实现,可以使用super
关键字。
例如:
//类中的"T abc(T a)"