A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张森 中级黑马   /  2013-1-29 12:47  /  2748 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请教下各位,判断某个对象是否属于某个类的实例可以用 instanceof关键字
obj instanceof Student

也可以用  obj.getClass.getName.equals(Object.class);

网上都说 尽量不要用 instanceof方式 ,因为instanceof属于硬编码,
但还是没搞懂究竟用instanceof不好在哪里

评分

参与人数 1技术分 +1 收起 理由
冯海霞 + 1

查看全部评分

2 个回复

倒序浏览
在处理程序里有一个方法,接受一个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在绝大多数情况下并不是推荐的做法,应当好好利用多态。
回复 使用道具 举报
yong230 发表于 2013-1-29 12:57
在处理程序里有一个方法,接受一个Bill类型的对象,计算金额。假设两种账单计算方法不同,而传入的Bill对象 ...

貌似 你回答的跟我说那个没任何关系哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马