在开发当中,我们经常使用到接口来完成功能的扩展操作。
所以,我们在进入函数式接口的方法规范之前先复习一些接口允许的方法定义
接口允许的方法定义
1.一开始在学习接口的时候,认为接口当中只可以定义常量和public修饰的实例方法
2.但是实际上接口在慢慢的学习当中我掌握了接口的几种常见的方法和属性可以定义:
(1)一种是默认形式的方法定义
void method1();
default的修饰符来进行修饰的,我们不使用这个,方法声明前面修饰符
列表什么都没加就表示是默认的
(2)一种是public abstract修饰的实例方法(注意:修饰符列表什么都没有的默认是public,abstract)
public abstract void method2();
(3)静态方法
static void method4(){};
public static void method3(){};
两种方式都可以,一种是默认形式,一种是全称的形式,同时,我们在使用的时候注意静态方法
后面必须跟上一个大括号
接口当中的静态方法(大括号里面可以编写代码)
【1】个人角度:为什么接口当中可以编写静态代码的代码体呢,同时接口不需要实现类去编写
原因:1.在接口的定义方面,接口是为了解决Java是单继承的问题,使得Java类可以同时实现
多个接口,但是Java类当中有时候会包含一定的静态方法。所以在接口当中就可以实现进行静态
方法的代码体编写。
2.类实现类一个接口,称为接口的实现类。但是实现类的作用是什么。解决Java单继承,
继承接口的方法。实现类存在的目的就是:解决接口当中实例方法的代码实现,而实例方法的调用
前提是具有对象,这就是实例方法为什么要实现类来实现。(考虑到接口是无法使用new关键字来
创建对象的)
类调用的,是面对类整体的,全局的,整个类都可以使用的。为了秉承接口可以被多个类所实现的
共享概念。我们将静态方法提前在接口当中编写可以被多个类所使用,这就是实现类不需要重写静
态方法的原因
(4)常量(一般接口的常量都作为实现类的全局属性来使用的)
public static final int constNumber = 100;
以上便是我觉得比较常见的接口方法定义
(5)使用default修饰符修饰的实例方法(跟默认的方法声明方式区别开来)
特性:可以在接口当中编写方法的代码体,也可以在实现类编写代码体
default void method5(){};
个人角度:思考不出原因是因为什么,各位大佬可以给予建议!但是这种形式很少使用
函数式接口
1.定义:有且仅有一个抽象方法的接口
2.思考:没有说到不能有常量的存在,不能有静态方法的声明等,所以函数式接口当中的方法:
@FunctionalInterface
public interface testInterface {
// void method1();
public abstract void method2();
static void method4(){};
public static void method3(){};
public static final int constNumber = 100;
default void method5(){
System.out.println("ff");
};
}
除了一个抽象方法之外,可以有多个静态方法,常量,使用default修饰符修饰的方法(不常用)
3.判断一个方法的声明是否能出现在函数式接口?
可以在接口上方设置注意@FunctionInterface
作用:可以监听当前接口是否为函数式接口
是:编译成功
不是:编译错误