lambda
作用:简化满足条件的匿名内部类(匿名内部类对象)
前提:函数式接口
语法格式:
语法格式()->{ }
( ) : 重写抽象方法的参数列表
-> : lambda 符号 | 箭头符号
{ } :重写抽象方法的方法体
匿名内部类的写法
//匿名内部类对象
Smoke s = new Smoke() {
@Override
public void smoking() {
System.out.println("边吸烟边喝水...");
}
};
//lambda写法1 : 标准写法
Smoke s = ()->{
System.out.println("边吸烟边喝水...");
};
//lambda写法2 : 当{}lambda体中语句只有一句,前后的{}可以省略
//Smoke s = ()->System.out.println("边吸烟边喝水...");
//lambda写法3 : 当()中存在参数,参数的数据类型可以省略
//Smoke s = (a,b)->System.out.println("边吸烟边喝水..."+(a+b));
//lambda写法4 : 当()中的参数只有一个,前后的()可以省略
//Smoke s = a -> System.out.println("边吸烟边喝水..."+(a));
//lambda写法5 : 当{}中语句体只有一句,并且为return带出返回值语句,前后的{}与return关键字可以一起省略
//Smoke s = a -> a>=18;
System.out.println(s.smoking(6));;
//函数式编程 : 把函数的实现作为参数传递
test((age)->{return false;});
匿名内部类
匿名对象只能在当前行使用一次
在主方法中使用先进行:
- 先定义实现类,实现重写方法
- 定义实现类对象
- 通过实现类对象调用重写后的方法
匿名内部类格式 | 匿名内部类对象格式 : 把定义实现类,创建实现类对象合并成为一步实现
new 接口|抽象类(){ ->实现类的类体|子类的类体
//重写抽象方法
注意 :
通过匿名内部类定义的实现类或子类只能在当前使用一次,因为没有类名无法根据类名继续使用