package com.itheima.demo01.FunctionalInterface;
/*
函数式接口的使用: 一般可以作为方法的参数和返回值类型
*/
public class Demo {
// 定义一个方法, 参数使用函数式接口 MyFunctionalInterface
public static void show(MyFunctionalInterface myInter){myInter.method();
}
public static void main(String[] args) {
// 调用 show 方法, 方法的参数是一个接口, 所以可以传递接口的实现类对象
show(new MyFunctionalInterfaceImpl());
// 调用 show 方法, 方法的参数是一个接口, 所以我们可以传递接口的匿名内部类
show(new MyFunctionalInterface() {
@Override
public void method() {System.out.println("使用匿名内部类重写接口中的抽象方法");
}
});
// 调用 show 方法, 方法的参数是一个函数式接口, 所以我们可以 Lambda 表达式
show(()->{System.out.println("使用 Lambda 表达式重写接口中的抽象方法");
});
// 简化 Lambda 表达式
show(()-> System.out.println("使用 Lambda 表达式重写接口中的抽象方法"));
}
}
package com.itheima.demo01.FunctionalInterface;
/*
函数式接口: 有且只有一个抽象方法的接口, 称之为函数式接口
当然接口中可以包含其他的方法 (默认, 静态, 私有)
@FunctionalInterface 注解
作用: 可以检测接口是否是一个函数式接口
是: 编译成功
否: 编译失败 (接口中没有抽象方法抽象方法的个数多余 1 个)
*/
@FunctionalInterface
public interface MyFunctionalInterface {
// 定义一个抽象方法
public abstract void method();
}
package com.itheima.demo01.FunctionalInterface;
/*
@Override 注解
检查方法是否为重写的方法
是: 编译成功
否: 编译失败
*/
public class MyFunctionalInterfaceImpl implements MyFunctionalInterface{
@Override
public void method() {}
/*@Override
public void method2() {}*/
/*@Override
public void method3() {}*/
}