接口回调 入门

有三个类,他们之间的关系如下:

interface A

class B implements A

class C implements A

要获得B类的对象,一般的写法是:B b = new B();

还有一种写法,叫接口回调,写法是:A b = new B();

意思是,用接口的变量b,去引用B的对象。接着就可以用b去调用B中的方法。但调用的方法必须是接口里定义了的。

接口回调带来的最大好处就是灵活性,例如必要时可以直接用b去引用C的对象:b = new C();

例子

interface People {

    void peopleList();

}

 

class Student implements People {

    public void peopleList(){

        System.out.println("I’m a student.");

    }

}

 

class Teacher implements People {

    public void peopleList() {

        System.out.println("I’m a teacher.");

    }

}

 

public class Example {

    public static void main(String args[]) {

        People a; // 声明接口变量

        a = new Student(); // 实例化,接口变量中存放对象的引用

        a.peopleList(); // 接口回调

        a = new Teacher(); // 实例化,接口变量中存放对象的引用

        a.peopleList(); // 接口回调

    }

}

输出:

I’m a student.

I’m a teacher.

概念就是这样。下面说开发中的常见的例子。

最最常见的接口回调的例子就是

List list = new ArrayList();

这里的List就是接口,ArrayList是普通类。(如下图,白色是接口,红色的普通类。)

List list = new ArrayList(); 这种写法正是接口回调的写法。这时,list只能调用接口List中定义了的方法。

假如,你在写一个很大的第三方库,并决定用LinkedList来实现这个库的核心。如果你的这个库非常依赖于访问list里的元素,最后你会发现使用LinkedList(访问时间O(n))是个非常糟的设计。这时候你才意识到,应该用ArrayList(访问时间O(1))  。

如果你之前是使用接口回调的写法,那么做这个改变十分容易。只要这样修改一下:

List list = new LinkedList();

改为

List list = new ArrayList();

而如果你用普通的写法,LinkedList list = new LinkedList()来实现你的核心库,那么修改就不那么容易了。因为不能保证其余代码没有使用LinkedList类专属的方法。

总而言之,这个选择仅仅是一个设计的问题......但这种设计是(尤其是工作在大型项目时)非常重要,因为它可以让你不用破坏现有的代码,就能实现特殊的改变。

时间: 2024-10-18 10:42:44

接口回调 入门的相关文章

谈谈-Android中的接口回调技术

Android中的接口回调技术有很多应用的场景,最常见的:Activity(人机交互的端口)的UI界面中定义了Button,点击该Button时,执行某个逻辑. 下面参见上述执行的模型,讲述James对Android接口回调技术的理解(结合前人的知识和自己的实践). 使用一个比喻很形象地说明:客户端有个疑问打电话请教服务端,但服务端无法现场给出解答,相互之间约定:服务端一旦有答案,使用电话的方式反馈给客户端. 以上有三个主体:客户端.服务端和接口(方式). 接口回调的原理框图说明: Demo界面

接口回调和向上转型

抄别人的,但为了自己掌握更加的踏实,所以复制到这里,拜谢原创!http://blog.csdn.net/u014025369/article/details/24707525 接口回调是指:可以把使用实现了某一接口的类创建的对象的引用赋给该接口声明的接口变量,那么该接口变量就可以调用被类实现的接口的方法.实际上,当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,这一过程称为对象功能的接口回调.看下面示例.interface People {     void people

接口_ _接口回调机制

在Android中到处可见接口回调机制,尤其是UI事件处理方面,本文给大家介绍android接口回调机制,涉及到android接口回调相关知识,对本文感兴趣的朋友可以参考下本篇文章 在使用接口回调的时候发现了一个经常犯的错误,就是回调函数里面的实现有可能是用多线程或者是异步任务去做的,这就会导致我们期望函数回调完毕去返回一个主函数的结果,实际发现是行不通的,因为如果回调是多线程的话你是无法和主函数同步的,也就是返回的数据是错误的,这是非常隐秘的一个错误.那有什么好的方法去实现数据的线性传递呢?先

Android接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法 Button btn = new Button(this); btn

PHP5接口技术入门

在PHP中我们声明类一般都用class来声明. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 <?php     class Student{ //用class声明一个Student类         function __construct(){ //实例化类的时候自动加载的构造方法__construct()         }         public function index(){    //成员方法         }         a

Java中的接口回调

接口回调是多态的另一种体现.接口回调是指:可以把使用某一个接口的类创建的对象的引用赋给该接口声明的接口变量中,那么该接口变量就可以调用被类实现的接口中的方法.当接口变量调用被类实现的接口中的方法时,就是通知相应的对象调用接口的方法,成为接口回调.不同的类在使用同一接口时,可能具有不同的功能体现.即接口的方法体不必相同,因此接口回调可能产生不同的行为. 接口回调会方便功能的扩展,在主功能外由框架层实现定制功能处理. 现在有两个类,一个是A,一个是B,回调就是A去调用B中的某个方法,然后B又回调A中

学习写接口回调

在做百度地图反地理编码时(坐标转地址), 需要自己写一个结果接口回调,一般在网络请求,点击事件,以及一些异步操作时,需要用到接口回调. 位置管理者,里面有位置监听: /** * 自己写的位置管理者 * Created by xhj on 16-1-27. */ public class TrackerLocationManager { protected TrackerLocationManager() { } /** * 位置管理者实例 */ private static TrackerLoc

笑谈接口回调

接口回调是个比较抽象但是很重要的知识,大多数初学者都会在刚接触它时感觉抓不住要领,但当我们实际掌握它后,会对它爱不释手.废话不多说,让我们开始吧. 我认识新事物的一般有这样的习惯,就是先从事物的名称入手.那么对于接口回调这个新事物,我们能从这个名字中获取多少信息呢?首先是接口,什么是接口呢?相信有一定编程基础的朋友都知道,就是一种规范,但是这种规范在没有实现之前,没有任何作用.就好比招聘广告一样,广告上列出的条件都是宽泛的,如我要招一名熟悉Java的程序员.这是一个规范,你想来应聘就必须满足熟悉

(转)Android之接口回调机制

开发中,接口回调是我们经常用到的. 接口回调的意思即,注册之后并不立马执行,而在某个时机触发执行. 举个例子: A有一个问题不会,他去问B,B暂时解决不出来,B说,等我(B)解决了再告诉你(A)此时A可以继续先做别的事情. 那么就只有当B解决完问题后告诉A问题解决了,A才可以能解决这个问题. 代码中比如最常用的: 一个Activity中给按钮一个接口回调方法,只有用户点击了这个按钮,告诉按钮被点击了,才会执行按钮接口回调的方法. Button btn = new Button(this); bt