接口回调与上转型运用
接口回调和上转型都是多态的应用:变量或参数写成父类/接口类型,实际传入具体子类对象。
上转型
上转型指“子类对象赋值给父类引用”:
Animal animal = new Cat();在上转型后:
- 能调用哪些方法,看左边的类型
Animal。 - 实际执行哪个重写方法,看右边的对象
Cat。
这就是“编译看左边,运行看右边”。
接口回调
接口回调指:把实现了某个接口的对象传给调用方,调用方在适当时机调用接口方法。
interface Callback {
void onFinish(String result);
}
class Task {
void run(Callback callback) {
callback.onFinish("任务完成");
}
}调用方只依赖 Callback,不关心传入对象到底属于哪个类。
为什么接口回调有用
- 降低耦合:调用方只认识接口与实现,不依赖具体类。
- 便于扩展:换一个实现类,调用方代码不用改。
- 适合事件通知、异步任务、按钮点击、策略替换等场景。
和匿名类、Lambda 的关系
如果接口是函数式接口,可以用三种方式传入实现:
// 1. 普通实现类
task.run(new MyCallback());
// 2. 匿名类
task.run(new Callback() {
@Override
public void onFinish(String result) {
System.out.println(result);
}
});
// 3. Lambda
task.run(result -> System.out.println(result));复习判断
- 参数类型写成接口,传入实现类对象,这是接口回调。
- 变量类型写成父类,赋值子类对象,这是上转型。
- 两者本质都依赖多态,让程序面向抽象而不是面向具体类。