方法引用(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();
    }
}
posted @ 2022-10-19 11:24  想见玺1面  阅读(21)  评论(0编辑  收藏  举报