论坛首页 入门技术论坛

instanceof 与isAssignableFrom

浏览 2235 次
该帖已经被评为新手帖
作者 正文
   发表时间:2010-01-12   最后修改:2010-01-12

instanceof 针对实例
isAssignableFrom针对class对象

 

isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。  
  通常调用格式是  
        Class1.isAssignableFrom(Class2)  
  调用者和参数都是   java.lang.Class   类型。  
     
  而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。  
    格式是:   oo   instanceof   TypeName    
    第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。  

 

 

 

	public static void main(String[] args) throws Exception {
		ArrayList list = new ArrayList();
		System.out.println(list instanceof List);
		System.out.println(list.getClass().isAssignableFrom(List.class));
		System.out.println(List.class.isAssignableFrom(list.getClass()));
		
		

 

结果:
true
false
true

其中instanceof是子--》父
isAssignableFrom是夫--》子

 

 

我们应该尽量少用instanceof 运算符

应该尽量用多态来替代它

 

接口

//账目
public interface Accounts {	

}
//水费
public class WaterAccounts implements Accounts {

}
//电费
public class ElectricityAccounts implements Accounts {

}
//客户端
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("收电费");

 }
	
}

 

 

 

论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics