函数式接口是java8中的一大特性,Lambda表达式只针对于函数式接口。函数式接口只有一个自身的方法,但是如果函数式接口重写了一个object类的方法,从而有两个方法,这样也不会报错的。比如这个列子覆盖了toString的方法:
public interface MyInterface {
void test();
String toString();
}
class Test2{
public void myTest(MyInterface myinterface){
System.out.println("1");
myinterface.test();
System.out.println("2");
}
public static void main(String [] args){
Test2 t=new Test2();
t.myTest(new MyInterface() {
@Override
public void test() {
System.out.println("hhh");
}
});
}
依旧没有报错,并且当接口是函数式接口的时候,我们就可以用Lambda表达式来表达匿名内部类
时期更加的简单:
@FunctionalInterface
public interface MyInterface {
void test();
String toString();
}
class Test2{
public void myTest(MyInterface myinterface){
System.out.println("1");
myinterface.test();
System.out.println("2");
}
public static void main(String [] args) {
Test2 t = new Test2();
t.myTest(() ->
{
System.out.println("hhh");
});
}
}
着两种表达方法的结果都是一样的。