试问怎么调用接口中的抽象函数
方法一:写一个类实现接口中的抽象方法,然后创建这个类的对象调用该类重写后的方法。
方法二:使用匿名内部类创建匿名内部类的对象。
// 匿名内部类实现重写接口的抽象方法 new test03() { @Override public void name() { // TODO Auto-generated method stub } };
匿名内部类的出现简化代码。lamdba表达式的出现有进一步的简化了匿名内部类的代码
public class Dome01 { public static void main(String[] args) { //分别使用匿名内部类和lamdba表达式 TestInterface testInterface = new TestInterface() { @Override public void print() { System.out.println("我爱java"); } }; testInterface.print(); //lamdba TestInterface testInterface2 = () ->{System.out.println("我爱java");}; testInterface2.print(); } } interface TestInterface { // 定义一个接口 void print(); }
lamdba表达式的标准格式
Lambda省去面向对象的条条框框,格式由3个部分组成:
- 一些参数
- 一个箭头
- 一段代码
Lambda表达式的标准格式为:
(参数类型 参数名称) ‐> { 代码语句 }
格式说明:
- 小括号内的语法与传统方法参数列表一致:无参数则留空;多个参数则用逗号分隔。
- -> 是新引入的语法格式,代表指向动作。
- 大括号内的语法与传统方法体要求基本一致。
函数式接口
函数式接口在Java中是指:有且仅有一个抽象方法的接口。
函数式接口,即适用于函数式编程场景的接口。而Java中的函数式编程体现就是Lambda,所以函数式接口就是可
以适用于Lambda使用的接口。只有确保接口中有且仅有一个抽象方法,Java中的Lambda才能顺利地进行推导。
格式:
只要确保接口中有且仅有一个抽象方法即可:
修饰符 interface 接口名称 {
public abstract 返回值类型 方法名称(可选参数信息); // 其他非抽象方法内容
}
由于接口当中抽象方法的 public abstract 是可以省略的,所以定义一个函数式接口很简单:
public interface MyFunctionalInterface { void myMethod(); }
FunctionalInterface注解:
与 @Override 注解的作用类似,Java 8中专门为函数式接口引入了一个新的注解: @FunctionalInterface 。该注 解可用于一个接口的定义上:
@FunctionalInterface
public interface MyFunctionalInterface {
void myMethod();
}
一旦使用该注解来定义接口,编译器将会强制检查该接口是否确实有且仅有一个抽象方法,否则将会报错。不过,即使不使用该注解,只要满足函数式接口的定义,这仍然是一个函数式接口,使用起来都一样。
个人学习,内容简略