如果存在继承关系,当Lambda中需要出现super调用时,也可以使用方法引用进行替代。
@FunctionalInterface
public interface Greetable {
public abstract void greet();
}
public class Human {
public void sayHello(){
System.out.println("hello,我是Human!");
}
}
public class Man extends Human{
@Override
public void sayHello(){
System.out.println("hello,I am Man");
}
public void method(Greetable g){
g.greet();
}
/*
因为有子父类关系,所以存在一个关键字super,代表父类,所以我们可以直接使用super调用父类方法
来实现方法引用,从而简化Lambda表达式
注意:由于使用super表达式,需要使用的函数不能为static,因此我们不能直接在main方法中写,
这个是测试发现的
*/
public void show()
{
System.out.println("Lambda表达式:");
method(()->{
Human h = new Human();
h.sayHello();
});
System.out.println("super方法引用:");
method(super::sayHello);
}
public static void main(String[] args) {
new Man().show();
/* Man man = new Man();
man.method(()->{
Human h = new Human();
h.sayHello();
});*/
//man.method(super::sayHello);这里会报错
}
}