匿名内部类简化过程
1. 普通实现类 / 子类 (最原始)
- 先定义一个子类/实现类,继承父类或实现接口,再创建对象
-
class 子类名 extends 父类 {重写父类中的方法 }// 或者class 实现类名 implements 接口 {重写接口中的方法 }父类/接口 对象名 = new 子类名()/实现类名();
2. 匿名内部类
- 简化前提: 子类/实现类只会使用一次
-
父类/接口 对象名 = new 父类/接口() {重写父类/接口中的方法 };
3. lambda表达式
- 简化前提: Lambda表达式只能替代函数式接口的匿名内部类! 函数式接口: 有且仅有一个抽象方法的接口
-
@FunctionalInterface //用来验证是否是函数式接口的注解 父类/接口 对象名 = (被重写方法的参数) -> {重写方法 };
4. 方法引用
- 简化前提: 方法签名与函数式接口的抽象方法一致 (简化参数不写)
-
// 下面几种类型基本都是大同小异的 // 静态方法 原始: (a,b) -> 类名.静态方法(a,b) 简化: 类名::静态方法 // 实例方法 原始: (a,b) -> 对象名.实例方法(a,b) 简化: 对象的类型名::实例方法 // 特定类型 原始: (a,b,c) -> a.实例方法(b,c) 简化: a的类型名::实例方法 // 构造器 (参数数量可以为0) 原始: (a,b) -> new 类名(a,b) 简化: 类名::new