开源俱乐部

开源框架
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

java instanceof浅谈!

Posted on 2007-07-04 22:17 HandSoft 阅读(872) 评论(0)  编辑  收藏 所属分类: 杂谈
instanceof 是Java的一个二元操作符,和==, > , < 是同一类东西. 由于它是由字母组成的,所以也是Java的保留关键字. 它的作用是测试它左边的对象是否是它右边的类的实例, 返回boolean类型的数据。例:
      String s = "I an an Object!";
      boolean isObject = s  instanceOf  Object;
我们声明了一个String对象引用, 指向一个String 对象, 然后用instanceof 来测试它所指向的对象是否是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在绝大多数情况下并不是推荐的做法, 应当好好利用多态.

只有注册用户登录后才能发表评论。


网站导航: