匿名内部类;
作用 : 简化实现类|子类,没有自己类本身作用的实现类|子类
匿名内部类对象 : 实现类|子类+创建对象
new Smoke(){ //实现类类体|抽象类的子类类体
@Override
public void smoking() {
System.out.println("边吸烟边吐烟圈...");
}
}
lambda表达式:
作用 : 简化匿名内部类对象
前提 : 函数式接口
函数式接口 : 接口中只有一个必须被重写的抽象方法
强制检查是否为函数式接口 : @FunctionalInterface
语法 :
()->{}
() : 接口中抽象方法的参数列表
-> : lambda符号|箭头函数
{} : 重写方法的方法体
public class Class007_Outer {
public static void main(String[] args) {
//实现类对象
Demo demo = new Demo();
demo.smoking();
//匿名内部类对象
//1. 匿名对象 : 只能在当前位置使用一次
new Smoke(){ //实现类的类体 | 匿名内部类的类体
@Override
public void smoking() {
System.out.println("一边打游戏一边吸烟...");
}
}.smoking();
//2.引用指向匿名内部类对象
//接口多态 : 接口引用调用的为接口中定义的成员
Smoke s = new Smoke(){
@Override
public void smoking() {
System.out.println("一边上课一边抽烟");
}
};
s.smoking();
s.smoking();
s.smoking();
//3.匿名内部类对象作为方法的实参
test(new Smoke() {
@Override
public void smoking() {
System.out.println("xxxxxxxx");
}
});
}
public static void test(Smoke smoke){
smoke.smoking();
}
}
interface Smoke{
void smoking();
}
class Demo implements Smoke{
@Override
public void smoking() {
System.out.println("边吸烟边吐烟圈...");
}
}
public class Class001_Lambda {
public static void main(String[] args) {
//匿名内部类
/*Swim s = new Swim(){
@Override
public void swimming() {
System.out.println("一边喝水一边游泳...");
}
};*/
//Lambda写法1 : ()->{}
/*Swim s = ()->{
System.out.println("一边换气一边游泳...");
};*/
//Lambda写法2 : 如果方法体语句只有一句,前后的{}可以省略
//Swim s = ()->System.out.println("一边嘻嘻笑一边游泳...");
//Lambda写法3 : 如果方法存在参数,参数的类型可以省略
// Swim s = (name,age)->System.out.println(name+"一边嘻嘻笑一边游泳...");
//Lambda写法4 : 如果参数只有一个,前后的()可以省略
//Swim s = name->System.out.println(name+"一边嘻嘻笑一边游泳...");
//Lambda写法5 : 如果lambda体语句只有一句,并且为return语句,前后的{}与return关键字可以一起省略
Swim s = age->age>18;
System.out.println(s.swimming(18));;
}
}
@FunctionalInterface
interface Swim{
boolean swimming(int age);
//void drinkWater();
}
interface Run{
void run();
}