方法引用_通过super引用父类的成员方法
package com.chunzhi.Test07SuperMethodReference; public class Man extends Human{ @Override public void sayHello() { System.out.println("你好,我是Man"); } // 定义一个方法参数传递函数式接口Meet接口 public void method(Meet m) { m.Greet(); } public void show() { // 三种执行方案,直接通过 super引用类的成员方法 最为简便,也就是第三种执行方案 // 第一种执行方案 // 调用method方法,方法的参数Meet是一个函数式接口,所以可以传递Lambda表达式 method(() -> { // 创建父类Human,调用父类中的sayHello方法 Human h = new Human(); h.sayHello(); // 创建子类Man,调用子类中重写的sayHello方法 Man m = new Man(); m.sayHello(); }); // 第二种执行方案 // 因为有子父类关系,所以存在一个关键字super,代表父类,所以我们可以直接使用super调用父类的成员方法 method(() -> { super.sayHello(); }); // 第三种执行方案 /* 使用super引用类的成员方法 super是已经存在的 父类的成员方法sayHello也是已经存在的 所以我们可以直接使用super引用父类的成员方法 */ method(super :: sayHello); } public static void main(String[] args) { new Man().show(); } }
父类Human:
package com.chunzhi.Test07SuperMethodReference; // 定义一个父类Human public class Human { public void sayHello() { System.out.println("你好,我是Human"); } }
Meet函数式接口:
package com.chunzhi.Test07SuperMethodReference; @FunctionalInterface public interface Meet { public abstract void Greet(); }