接口回调与上转型运用

接口回调和上转型都是多态的应用:变量或参数写成父类/接口类型,实际传入具体子类对象。

上转型

上转型指“子类对象赋值给父类引用”:

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));

相关:匿名类接口与实现

复习判断

  • 参数类型写成接口,传入实现类对象,这是接口回调。
  • 变量类型写成父类,赋值子类对象,这是上转型。
  • 两者本质都依赖多态,让程序面向抽象而不是面向具体类。

面对对象的程序与设计(基础入门) 接口与实现 多态 子类与继承