概念:一个接口有且只有一个抽象方法,即函数式接口。
一般我们使用@FunctionalInterface注解标记函数式接口
/**
* @author qinxun
* @date 2023-06-02
* @Descripion: 函数式接口
*/
@FunctionalInterface
public interface MyInterface {
}
标记了这个注解,如果没有提供有抽象的方法,就会提示报错
/**
* @author qinxun
* @date 2023-06-02
* @Descripion: 函数式接口
*/
@FunctionalInterface
public interface MyInterface {
// 抽象方法
void eat(String food);
}
如果提供两个抽象方法 也会出错
函数式接口中还可以存在静态方法和default默认方法
/**
* @author qinxun
* @date 2023-06-02
* @Descripion: 函数式接口
*/
@FunctionalInterface
public interface MyInterface {
// 抽象方法
void eat(String food);
// 静态方法
static void sleep() {
System.out.println("这是函数式接口中的静态方法,可以直接使用类名调用");
}
// 默认方法
default void play() {
System.out.println("这是函数式接口中的默认方法,可以直接使用对象调用");
}
}
测试
/**
* @author qinxun
* @date 2023-06-02
* @Descripion: 接口实现类
*/
public class MyImpl implements MyInterface {
//实现抽象方法
@Override
public void eat(String food) {
System.out.println("我在吃" + food);
}
public static void main(String[] args) {
MyInterface myInterface = new MyImpl();
// 抽象方法
myInterface.eat("苹果");
// 对象调用默认方法
myInterface.play();
// 类调用静态方法
MyInterface.sleep();
}
}
程序执行结果
我在吃苹果
这是函数式接口中的默认方法,可以直接使用对象调用
这是函数式接口中的静态方法,可以直接使用类名调用