android中,电话的两个核心类就是call.java与Phone.java了,这两个类,call是abstract class,Phone是interface。google这样设计自然有其理由的,下面我结合自己的理解来简要的分析下,为什么call用抽象类,Phone用接口来实现。

android在中间层的telephony有两套机制,一套是GSM,一套是CDMA。自然基本上所有的实现都有两条路径了。选择哪种实现,是RIL读取的网络制式决定的,当然你也可以在framework自己指定。这两套机制,各有自己的call与Phone。它们决定了call与Phone的不同实现方式。

OK,我们先来了解下抽象类与接口的区别。一句话,抽象类是模板,接口是规范。

模板是什么,模板就像我们经常填写的请假单,试卷,报名表。。。它们把不变的东西取出来,因为那些每个人都是一样的,然后你可以自己复写你自己需要改变的东西,这样它就成了你自己的了。call类也是如此,GSMCall与CDMACall的实现大部分是一致的,这样的话,定义一个模板类然后继承它实现两个子类,这样子类要复写的代码就很少了。当然,这不是需要用继承的唯一理由,因为这用接口也可以实现的,虽然需要写的代码更多了些。我们用继承,需要考虑的最重要的一点是,我们需不需要向上转型。call类明显是需要的,因为我们在上层根本没有用到GSMCall与CDMACall,我们用到的都是call,上层是不需要管中间层的实现的,这样其实就是一个向上转型的过程了。因此,call用抽象类比接口好。

下面我们来了解下Phone为什么用接口来实现。

接口是什么?接口是规范,什么意思,接口就是规则,就相当于60分及格一样,你60分以上,你就及格了。那么60分及格就是一套规则。只要任何人实现了这个规则,那么他就及格了。其实Phone就是一个规则,因为我们使用的GSMPhone与CDMAPhone,它们的本质都是handler,但是它们都实现了Phone接口,也就是说,它们都具有Phone的特性。由于它们继承自handler,也就是说,它们不能再继承与抽象类Phone了,而且,由于Phone有代理类,它们也不需要向上转型。这样,接口相对于抽象类的更灵活的优势,选择接口肯定是比抽象类好的。

以上,是我对着两个类的简单实现分析,个人愚见,欢迎拍砖

更多相关文章

  1. Android(安卓)实现记住用户名和密码的功能
  2. Android多线程下载远程图片
  3. android进程间服务通信示例
  4. 轻松搞定 android MVP 架构、okHttp 网络模块封装 的 项目
  5. Android中Fragment与Activity之间的交互(两种实现方式)
  6. DIY Android之一--原生Android系统主题支持的设计和实现
  7. Android多线程下载远程图片
  8. Android(安卓)轻松实现语音识别的完整代码
  9. 浅谈Java中Collections.sort对List排序的两种方法

随机推荐

  1. android 怎么实现启动页提前加载webView
  2. android截取屏幕图
  3. Android 国码选择 country code
  4. android圆形图片显示效果,带边框
  5. 自定义ProgressBar的样式失效
  6. Android(安卓)数据库的简单使用
  7. android listview 自动加载
  8. Android中Activity之间访问互传参数
  9. 转:Android之通信录中的联系人操作
  10. Android实现圆角弹框功能