通过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(); } }
运行结果:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix