• instanceof 与isAssignableFrom


    instanceof 针对实例 
    isAssignableFrom针对class对象

    isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或接口。   
    通常调用格式是  

    Java代码  收藏代码
    1. Class1.isAssignableFrom(Class2)     

    调用者和参数都是   Java.lang.Class   类型。   
          
      而   instanceof   是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例。   
        格式是:   

    Java代码  收藏代码
    1. oo   instanceof   TypeName       

         第一个参数是对象实例名,第二个参数是具体的类名或接口名,例如   String,InputStream。

    Java代码  收藏代码
    1. public class Test {  
    2.     public static void main(String[] args) {  
    3.         List<String> list = new ArrayList<String>();  
    4.         System.out.println(list instanceof List);  
    5.         System.out.println(list instanceof ArrayList);  
    6.           
    7. /*      System.out.println(list.getClass()); 
    8.         System.out.println(List.class); 
    9.         System.out.println(ArrayList.class);*/  
    10.           
    11.         System.out.println(list.getClass().isAssignableFrom(List.class));  
    12.         System.out.println(List.class.isAssignableFrom(list.getClass()));  
    13.     }  
    14. }  

    结果:

    true
    true
    false
    true

    其中instanceof是子-->父 
    isAssignableFrom是父-->子

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

    应该尽量用多态来替代它

    Java代码  收藏代码
    1. public interface Accounts {     
    2.   
    3. }  
    4.   
    5. public class WaterAccounts implements Accounts {  
    6.       
    7. }  
    8.   
    9. public class ElectricityAccounts implements Accounts {   
    10.       
    11. }  
    Java代码  收藏代码
      1. //客户端    
      2. public class test {  
      3.   
      4.     public static void main(String[] args) {  
      5.   
      6.         Accounts accsWater = new WaterAccounts();  
      7.         Accounts accsElectricity = new ElectricityAccounts();  
      8.   
      9.         acceptAcounts(accsWater);  
      10.   
      11.     }  
      12.   
      13.     // 第一种使用instanceof  
      14.     public static void acceptAcounts(Accounts accs) {  
      15.   
      16.         if (accs instanceof WaterAccounts) {  
      17.   
      18.             System.out.println("收水费");  
      19.   
      20.         } else if (accs instanceof ElectricityAccounts) {  
      21.   
      22.             System.out.println("收电费");  
      23.         }  
      24.   
      25.     }  
      26.   
      27.     // 第二种使用多态  
      28.     public static void acceptAcounts(WaterAccounts accs) {  
      29.   
      30.         System.out.println("收水费");  
      31.   
      32.     }  
      33.   
      34.     public static void acceptAcounts(ElectricityAccounts accs) {  
      35.   
      36.         System.out.println("收电费");  
      37.   
      38.     }  
      39.   
      40. }  
  • 相关阅读:
    在MAC系统的eclipse里打开android sdk manager
    在MAC上搭建eclipse+android开发环境以及eclipse的svn插件的安装
    C语言入门
    变量和数据类型
    兼容 FF&IE 的替换鼠标选择文字方法(转载)
    JavaScript 中在光标处插入添加文本标签节点 详细方法
    jquery获取鼠标位置
    转:javascript Range对象跨浏览器常用操作
    日省三思
    jQuery强大的jQuery选择器 (详解)[转]
  • 原文地址:https://www.cnblogs.com/lxl57610/p/6083060.html
Copyright © 2020-2023  润新知