方法引用(2)
通过super引用父类
如果存在继承关系,当Lambda中需要出现super调用时,也可以使用方法引用进行替代。首先是函数式接口:
/** * 定义见面的函数式接口 */ @FunctionalInterface public interface Greeable { // 定义一个见面的方法 void greet(); }
然后是父类Human的内容:
/** * 定义父类 */ public class Human { // 定义一个sayHello的方法 public void sayHello(){ System.out.println("Hello,我是Human"); } }
最后是子类Man的内容,其中使用了Lambda的写法∶
/** * 定义一个子类 */ public class Man extends Human{ // 子类重写父类sayHello的方法 @Override public void sayHello(){ System.out.println("Hello,我是Man"); } // 定义一个方法参数传递Greeable接口 public void method(Greeable g){ g.greet(); } public void show(){ /*// 调用method方法,方法的参数Greeable是一个函数式接口,所以可以传递Lambda 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 { // 定义一个方法 public void buy(); }
通过this引用本类的成员方法:
/** * 通过this引用本类的成员方法 */ public class Husband { // 定义一个buyHouse的方法 public void buyHouse(){ System.out.println("北京 时代峻峰!"); } // 定义一个marry的方法,参数传递Richable接口 public void marry(Richable r){ r.buy(); } // 定义一个soHappy的方法 public void soHappy(){ /* 使用方法引用优化Lambda表达式 this是已经存在的 本类的成员方法buyHouse也是已经存在的 所以我们可以直接使用this引用本类的成员方法buyHouse */ marry(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