匿名内部类
匿名内部类:定义类的最终目的是创建一个类的实例,但是如果某个类的实例只是用一
次,则可以将类的定义与类的创建,放到与一起完成,或者说在定义类的同时就创建一
个类 , 以这种方法定义的没有名字的类成为匿名内部类。
格式如下:
new ClassOrInterfaceName(){
/*类体*/
}
①匿名内部类可以继承一个类或实现一个接口,这里的 ClassOrInterfaceName 是匿名
内部类所继承的类名或实现的接口名。但匿名内部类不能同时实现一个接口和继承一个
类,也不能实现多个接口。如果实现了一个接口,该类是 Object 类的直接子类,匿名
类继承一个类或实现一个接口,不需要 extends 和 implements 关键字。
②由于匿名内部类没有名称,所以类体中不能定义构造方法,由于不知道类名也不能使
用关键字来创建该类的实例。实际上匿名内部类的定义、构造、和第一次使用都发生在
同样一个地方。此外,上式是一个表达式,返回的是一个对象的引用,所以可以直接使
用或将其复制给一个对象变量,如:
TypeName obj=new Name(){
/*此处为类体*/
}
同样,也可以将构造的对象作为调用的参数。例:
someMethod(new Name(){
/*此处为类体*/
});
例如以下代码:



Lambda表达式:
说到匿名内部类,就不得不说到Lambda表达式,是jdk1.8新特性之一.其目的是简化匿名内部类,防止过多的匿名内部类,但它的使用
前提是需要一个函数式接口(@FunctionalInterface强制检查是否为一个函数式接口).
基本格式:
* ()->{}
* () 抽象方法的参数列表
* -> 箭头函数|箭头符号
* {} 抽象方法的方法体