方法引用_通过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();
}

 

posted @ 2020-12-04 12:37  春志  阅读(391)  评论(0编辑  收藏  举报