注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

民主与科学

独立之人格,自由之思想

 
 
 

日志

 
 

instanceof和isAssignableFrom及isInstance  

2012-08-19 08:20:20|  分类: JAVA基础 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
本文编辑整理自: http://caojunwei.iteye.com/blog/799000
在java中,instanceof关键字是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例;而isAssignableFrom不是关键字,只是class对象的一个方法,是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口;isInstance也只是class对象的一个方法,用来判断对象是否属于某个类型的实例

instanceof 的使用格式是:   
oo   instanceof   TypeName
第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。     
isAssignableFrom通常调用格式是  
Class1.isAssignableFrom(Class2)     
调用者和参数都是java.lang.Class类型。   
isInstance通常调用格式是  
Class1.isInstance(oo)     
第一个参数是具体的类名或接口名,例如   String,InputStream;第二个参数是对象实例名,
 示例1

public class Test {  
    public static void main(String[] args) {  
List<String> list = new ArrayList<String>();
System.out.println(list instanceof List);
System.out.println(list instanceof ArrayList);
System.out.println(List.class.isInstance(list));
System.out.println(ArrayList.class.isInstance(list));

System.out.println(list.getClass());
System.out.println(List.class);
System.out.println(ArrayList.class);

System.out.println(list.getClass().isAssignableFrom(List.class));
System.out.println(list.getClass().isAssignableFrom(ArrayList.class));
System.out.println(List.class.isAssignableFrom(list.getClass()));  
    }  
}  

 
结果:
true
true
true
true
class java.util.ArrayList
interface java.util.List
class java.util.ArrayList
false
true
true

我们应该尽量少用instanceof 运算符,应该尽量用多态来替代它
示例2 
文件1

public interface Accounts {     
  
}  
public class WaterAccounts implements Accounts {  
      
}  
public class ElectricityAccounts implements Accounts {   
      
}  
文件2

public class test {  
    public static void main(String[] args) {  
        Accounts accsWater = new WaterAccounts();  
        Accounts accsElectricity = new ElectricityAccounts();  
        acceptAcounts(accsWater);  
    }  
    /*第一种使用instanceof  */
    public static void acceptAcounts(Accounts accs) {  
        if (accs instanceof WaterAccounts) {  
            System.out.println("收水费");  
        } else if (accs instanceof ElectricityAccounts) {  
            System.out.println("收电费");  
        }  
    }  
    /*第二种使用多态 */
    public static void acceptAcounts(WaterAccounts accs) {  
        System.out.println("收水费");  
    }  
    public static void acceptAcounts(ElectricityAccounts accs) {  
        System.out.println("收电费");  
    }  
}  

结束!
  评论这张
 
阅读(757)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017