java 匿名内部类 和 Lambda 表达式
同步文章(更好的排版):
java 匿名内部类 和 Lambda 表达式
一、匿名内部类
1.1说明
在一个接口或抽象类定义完成后。若想使用此接口或此抽象类,一般需要定义专门的子类,随后利用子类对象的向上转型才可以使用此接口或抽象类。但是很多时候某些子类可能只使用一次,之后就可能不再使用了。那么单独为这个子类创建一个类文件就会非常浪费,此时就可以利用匿名内部类来解决此类问题
1.2 匿名内部类的作用
用于直接对某个接口或抽象类的使用,减少专门子类的定义
1.3 特点
- 相当于没有名字的局部内部类,匿名内部类定义在方法中。没有专门的 class 类名来定义
- 匿名内部类由于没有具体的名称,想再使用就要重新定义
- 匿名内部类中不能手动添加构造方法,不能包含静态成员
- 匿名内部类中一般不包含特有方法,只重写接口或抽象类中的方法。特有方法:指只有这个类中存在,其他类中不存在
1.4 接口的正常使用情况(抽象类同理)
- 定义接口
- 定义实现接口的类
- 利用子类对象的向上转型使用此接口
但有时候这个 Mouse 子类只使用一次,之后可能就不使用了。这样专门定义一个子类就会造成浪费。为了解决这个问题。匿名内部类就产生了
1.5 通过局部内部类使用接口(抽象类同理)
public class Test02 {
//main 方法也是方法
public static void main(String[] args) {
//通过内部类实现接口
//第一步:创建实现接口的内部类
class Upan implements USB{
@Override
public void service() {
System.out.println("U盘连接成功..........");
}
}
//第二步:实例化内部类
Upan upan = new Upan();
//第三步:使用内部类的方法
upan.service();
}
}
1.6 通过匿名内部类使用接口(抽象类同理)
接口名或抽象类名 对象名 = new 接口名或抽象类名
{
//这对括号里的就是匿名内部类
//重写接口或抽象类中的