5.23日 instanceof的用法

instanceof是Java的一个二元操作符,和==,>,<是同一类东东。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据。

举个例子:

  String s = "I AM an
Object!";
  boolean isObject = s instanceof
Object;

  我们声明了一个String对象引用,指向一个String对象,然后用instancof来测试它所指向的对象是否是Object类的一个实例,显然,这是真的,所以返回true,也就是isObject的值为True。

instanceof有一些用处。比如我们写了一个处理账单的系统,其中有这样三个类:

  public
class Bill {//省略细节}
  public class PhoneBill
extends Bill {//省略细节}
  public class GasBill
extends Bill
{//省略细节}

  在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象可能是两种中的任何一种,所以要用instanceof来判断:

  public
double calculate(Bill bill) {
  if (bill instanceof
PhoneBill
)
{
  //计算电话账单
  }
  if
(bill instanceof GasBill)
{
  //计算燃气账单
  }
  ...
  }
  这样就可以用一个方法处理两种子类。

  然而,这种做法通常被认为是没有好好利用面向对象中的多态性。其实上面的功能要求用方法重载完全可以实现,这是面向对象变成应有的做法,避免回到结构化编程模式。只要提供两个名字和返回值都相同,接受参数类型不同的方法就可以了:

  public
double calculate(PhoneBill bill)
{
  //计算电话账单
  }

  public
double calculate(GasBill bill)
{
  //计算燃气账单
  }

  所以,使用instanceof在绝大多数情况下并不是推荐的做法,应当好好利用多态。

时间: 2024-10-28 16:24:50

5.23日 instanceof的用法的相关文章

七周二次课(1月23日)

七周二次课(1月23日)10.6 监控io性能 iostat -x iostat -x 1 %util 磁盘等待io  数字大,磁盘读写等待过长 iotop 动态显示 根据磁盘io db数据库示例 10.7 free命令 free   查看内存  centos6和7显示结果不同 buff   缓冲      cache 缓存 数据流向图解 used+free+buff/cache=total available=free+buff/cache 10.8 ps命令 ps aux  静态列出系统所有

Linux20180423五周第四次课(4月23日)

五周第四次课(4月23日) 8.6 管道符和作业控制8.7/8.8 shell变量8.9 环境变量配置文件扩展bashrc和bash_profile的区别 http://ask.apelearn.com/question/7719简易审计系统: http://www.68idc.cn/help/server/linux/2014042190951.html关于PROMPT_COMMAND环境变量的含义 http://www.linuxnote.org/prompt_command-environ

2014年4月23日 10:22:08

step 1 : 做tcp网络编程,要解析一批批的数据,可是数据是通过Socket连接的InputStream一次次读取的,读取到的不是需要转换的对象,而是要直接根据字节流和协议来生成自己的数据对象. 按照之前的编程思维,总是请求然后响应,当然Socket也是请求和响应,不过与单纯的请求响应是不同的. 这里Socket连接往往是要保持住的,也就是长连接,然后设置一个缓冲区,网络流不断的追加到缓冲区.然后后台去解析缓冲区的字节流. http://cuisuqiang.iteye.com/blog/

软考中高项学员:2016年3月23日作业

软考中高项学员:2016年3月23日作业 一.项目进度管理1.进度管理包括哪六个过程?2.什么是滚动式规划?3.什么是控制账户.规划组合?4.请说明FS.FF.SS.SF的含义.5.虚活动的含义?6.三种依赖关系是哪三种?7.活动资源估算的方法.工具和技术?(记)8.活动历时估算的方法.工具和技术?(记)9.何时可以用类比估算?10.参数估算的含义?11.三点估算公式?标准差计算公式?正负一倍的标准差情况下,概率是多少?2倍的呢?3倍的呢?12.后备分析中,应急时间=时间储备=缓冲时间吗?13.

阿西莫夫 - 神们自己(2015年6月23日)

<神们自己> 作 者:阿西莫夫译 者:崔正男系 列:出 版:江苏凤凰文艺出版社字 数:230千字阅读完成:2015年6月23日

第17期中国智能家居主题沙龙将于5月23日在京举行

中国智能家居主题沙龙已经办16期,为中国智能家居的发展贡献了自己的力量,在这轮智能家居热潮中,沙龙将继续为政府.投资机投.智能家居产品提供商.智能家居方案提供商,智能家居集成商,智能家居渠道提供多方位的合作,促进行业的快速爆发. 活动宗旨: 搭建行业用户与企业沟通的桥梁,以交流.合作.服务为目的,探讨行业现状及走势,推广普及新理念.建立智能家居沟通平台以宣传企业品牌,推广新技术,展示新产品.根据智能家居行业各产业链上下游人士的需求,有针对性地提供服务,促进行业发展. 活动背景: 2013年初<国

高级:2015年10月23日作业答案

高级学员:2015年10月23日作业一.业务流程管理与重组1.流程管理的本质与核心是什么: 流程管理的核心是流程,流程管理的本质就是构造卓越的业务流程.2.流程管理与BPR的区别: 流程管理是以一种规范化的构造端到端的卓越业务流程为中心,以持续的提高组织业务绩效为目的的系统化方法.与业务流程重组的定义相似.流程管理的思想包含了BPR,但比BPR的概念更广泛,更适合现实需要.3.业务流程改进的过程和方法中,分析问题用哪2个图:寻找原因用什么图. 分析问题采用头脑风暴法.矩阵图法,寻找原因用鱼骨图法

高级学员:2015年10月23日作业

高级学员:2015年10月23日作业一.业务流程管理与重组1.流程管理的本质与核心是什么:2.流程管理与BPR的区别:3.业务流程改进的过程和方法中,分析问题用哪2个图:寻找原因用什么图.4.流程的分析与设计方法是哪六条(只答小标题):5.BPR的首要问题是什么:6.BPR的实施会引起企业哪3个方面的变化.二.知识管理1.对于项目组织来说,什么是知识.2.隐性知识的共享方法有哪4条:三.项目整体绩效评估1.什么是3E审计:2.霍尔从哪3个维度考察系统工程.3.用什么分别解决:确定性.可测定的不确

云计算之路-阿里云上-寒流来袭:2014年12月23日21:45-23:15网站故障

1个多小时间的网站故障给大家带来很大的麻烦,在这里我们表示深深的歉意!希望大家能够谅解! 这两天上海的气温在回升,而杭州的云上却突然袭来一股寒流. 12月23日晚上,阿里云进行了一次RDS的发布,在这次发布中自动地修改了我们的数据库连接数限制,谁也不知道,然后... 21:45:52左右开始,日志中出现大量执行时间超过5秒的请求. 然后出现超过10秒.20秒...甚至超过100秒的请求. 21:46:50左右,开始出现数据库连接错误: System.Data.SqlClient.SqlExcep