instanceof 针对实例 
isAssignableFrom针对class对象

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

  1. Class1.isAssignableFrom(Class2)

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

  1. oo   instanceof   TypeName

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

  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. /*      System.out.println(list.getClass());
  7. System.out.println(List.class);
  8. System.out.println(ArrayList.class);*/
  9. System.out.println(list.getClass().isAssignableFrom(List.class));
  10. System.out.println(List.class.isAssignableFrom(list.getClass()));
  11. }
  12. }

结果:

true
true
false
true

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

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

应该尽量用多态来替代它

  1. public interface Accounts {
  2. }
  3. public class WaterAccounts implements Accounts {
  4. }
  5. public class ElectricityAccounts implements Accounts {
  6. }
    1. //客户端
    2. public class test {
    3. public static void main(String[] args) {
    4. Accounts accsWater = new WaterAccounts();
    5. Accounts accsElectricity = new ElectricityAccounts();
    6. acceptAcounts(accsWater);
    7. }
    8. // 第一种使用instanceof
    9. public static void acceptAcounts(Accounts accs) {
    10. if (accs instanceof WaterAccounts) {
    11. System.out.println("收水费");
    12. } else if (accs instanceof ElectricityAccounts) {
    13. System.out.println("收电费");
    14. }
    15. }
    16. // 第二种使用多态
    17. public static void acceptAcounts(WaterAccounts accs) {
    18. System.out.println("收水费");
    19. }
    20. public static void acceptAcounts(ElectricityAccounts accs) {
    21. System.out.println("收电费");
    22. }
    23. }

isAssignableFrom的更多相关文章

  1. Java中isAssignableFrom的用法

    class1.isAssignableFrom(class2) 判定此 Class 对象所表示的类或接口与指定的 Class 参数所表示的类或接口是否相同,或是否是其超类或超接口.如果是则返回 tru ...

  2. java.lang.Class.isAssignableFrom()用法解析

    一.概述: 此方法主要用来判断 "参数类" 是否是 "源类" 的子类.接口实现类,或者与 "源类" 相同,在此情况下返回 true; 二.格 ...

  3. instanceof, isinstance,isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

  4. instanceof 与isAssignableFrom

    instanceof 针对实例 isAssignableFrom针对class对象 isAssignableFrom   是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的超类或 ...

  5. Class.isAssignableFrom(Class clz)与instanceof与Class.isInstance(Object obj) 的区别和联系

    编程的时候可能会遇到一个不知道它属于哪个类的对象,我们可以用下列运算符或者方法来判断.  1.instanceof instanceof是运算符只被用于对象引用变量,检查左边的被测试对象是不是右边类或 ...

  6. instanceof、 isinstance 与 isAssignableFrom的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false. 形象地:自身实例或子类实例 instanc ...

  7. isInstance和isAssignableFrom的用法

    String str = ""; Object o = new Object(); System.out.println(String.class.isInstance(o)); ...

  8. isAssignableFrom与instanceof的区别

    1.isAssignableFrom针对的是class对象: 2.instanceof是实例. isAssignableFrom是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的 ...

  9. instanceof运算符、Class的isInstance( )与isAssignableFrom之间的区别

    instanceof运算符 只被用于对象引用变量,检查左边的被测试对象 是不是 右边类或接口的 实例化.如果被测对象是null值,则测试结果总是false.形象地:自身实例或子类实例 instance ...

  10. instanceof、isInstance、isAssignableFrom的区别

    https://stackoverflow.com/questions/3949260/java-class-isinstance-vs-class-isassignablefrom 1. MyCla ...

随机推荐

  1. 数据结构期末复习( はち)--VOA图关键路径求法

    题目如下图: 注:将123456当成abcdef. 事件最早发生事件求法:找从原点到该事件的最长路径(从前往后推) 对a:Ve=0 对b:Ve=max{ 2 , 15+4 }=19 对c:Ve=15 ...

  2. 1037: [ZJOI2008]生日聚会Party

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3121  Solved: 1858[Submit][Status][Discuss] Descript ...

  3. bat 服务启动脚本

    当电脑上有多个数据库(特别是Oracle,占用内存大,所以我都是设置为手动启动的,或者想在电脑上运行一下其他UI类软件或玩些游戏的时候也需要暂时关掉,奈何我这渣机(V_V))需要启动或停止的时候,就用 ...

  4. JavaScript算数

    常数                              Math.E 圆周率                           Math.PI 2的平方根                  ...

  5. jupyter notebook(三)——IOPub_data_rate_limit报错

    一.问题 运行jupyter notebook,然后运行python代码,读取文件处理时,会报错.发现时IO读取时错误.应该是IO速率问题. 下面是问题报错: IOPub data rate exce ...

  6. 将Excel文件转为csv文件的python脚本

    #!/usr/bin/env python __author__ = "lrtao2010" ''' Excel文件转csv文件脚本 需要将该脚本直接放到要转换的Excel文件同级 ...

  7. B1061 判断题 (15分)

    B1061 判断题 (15分) 判断题的评判很简单,本题就要求你写个简单的程序帮助老师判题并统计学生们判断题的得分. 输入格式: 输入在第一行给出两个不超过 100 的正整数 N 和 M,分别是学生人 ...

  8. ListNode Java创建链表

    用了一种自创的比较简洁的方式来创建链表 class ListNode { //为了方便,这两个变量都使用pub1ic, //存放数据的变量,直接为int型 public int data; //存放结 ...

  9. 信号量和互斥量C语言示例理解线程同步

    Table of Contents 1. 线程同步 1.1. 用信号量进行同步 1.2. 用互斥量进行同步 2. 参考资料 线程同步 了解线程信号量的基础知识,对深入理解python的线程会大有帮助. ...

  10. 第九届极客大挑战 部分WP

    CODE 和0xpoker分0day 百度 取石子游戏. https://blog.csdn.net/qq_33765907/article/details/51174524 已经说得很详细了,慢慢来 ...