instanceof和isAssignableFrom及isInstance

本文编辑整理自:  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 ( "收电费" );  
    }  
}  

结束!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值