通过super引用父类的成员方法以及通过this引用本类的成员方法
通过super引用父类的成员方法
如果存在继承关系当lambda中出现需要super调用时,也可以使用方法引用进行代替
/** * 定义见面的函数式接口 */ @FunctionalInterface public interface Greetable { //定义见面方法 void greet(); }
/** * 定义父类 */ public class Human { public void sayHello(){ System.out.println("Hello,Human"); } }
/** * 定义子类 */ public class Man extends Human{ //子类重写父类的sayHello方法 @Override public void sayHello() { System.out.println("Hello,max"); } //定义一个方法参数传递Greetable接口 public void method(Greetable g){ g.greet(); } public void show(){ // //调用method方法,方法的参数Greetable是一个函数式几口 // method(()->{ // //创建父类的Human对象 // Human h = new Human(); // //调用父类的sayHello方法 // h.sayHello(); // }); //因为有子父类关系,所以存在的一个关键字super,代表父类,所以我们可以直接使用super调用父类的成员方法 // method(()->{super.sayHello();}); /* 使用super引用父类的成员方法 super是已经存在的 父类的成员方法sayHello也是已经存在的 所以我们可以直接使用super引用父类的成员方法 */ method(super::sayHello); } public static void main(String[] args) { new Man().show(); } }
通过this引用本类的成员方法
this代表当前对象,如果需要引用的方法就是当前类中的成员方法,那么可以使用"this:成员方法""的格式来使用方法引用。
/** * 定义一个富有的函数式接口 */ @FunctionalInterface public interface Richable { //定义一个方法 void buy(); }
/* 使用this引用本类的成员方法 */ public class Husband { //定义一个买房的方法 public void buyHouse(){ System.out.println("买房"); } //定义一个结婚的方法,参数传递Richable接口 public void marray(Richable r){ r.buy(); } //定义一个非常高兴的方法 public void soHappy(){ //调用结婚方法,方法的参数Richable是一个函数式接口 marray(()->{ //使用this.成员方法,调用本类买房子的方法 this.buyHouse(); }); /* 使用方法引用优化Lambda表达式 this是已经存在的 本来的成员方法buyHouse也是已经存在的 所以我们可以直接this直接引用本来的成员方法buyHouse */ marray(this::buyHouse); } public static void main(String[] args) { new Husband().soHappy(); } }
运行结果:


浙公网安备 33010602011771号