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. java内存模型原理阅读总结

    Java内存模型可以理解为在特定操作协议下,对特定的内存或高速缓存进行读写访问的过程抽象.不同架构的物理计算机可以有不一样的内存模型,java虚拟机也有自己的内存模型,java虚拟机规范中试图定义一种 ...

  2. 解决MySQL安装到最后一步未响应的三种方法

    这种情况一般是你以前安装过MySQL数据库服务项被占用了.解决方法: 方法一:安装MySQL的时候在这一步时它默认的服务名是“MySQL” 只需要把这个名字改了就可以了.可以把默认的服务器的名称手动改 ...

  3. oracle数据库删除表时遇见需要解锁问题

    今天在进行数据清空时,不注意把表锁住了,记录一下解锁过程. 第一步执行 select t2.username,t2.sid,t2.serial#,t2.logon_time from v$locked ...

  4. React报错 :browserHistory doesn't exist in react-router

    由于版本问题,React中history不可用 import { hashHistory } from 'react-router' 首先应该导入react-router-dom包: import { ...

  5. 认识mysql(2)

    1.表字段的操作 1.语法 :alter table 表名 执行动作; 2.添加字段(add) alter table 表名 add 字段名 数据类型; alter table 表名 add 字段名 ...

  6. 十一、MySQL 插入数据

    MySQL 插入数据 MySQL 表中使用 INSERT INTO SQL语句来插入数据. 你可以通过 mysql> 命令提示窗口中向数据表中插入数据,或者通过PHP脚本来插入数据. 语法 以下 ...

  7. Linux ps与top命令

    Linux ps与top命令 这两个命令都是查看系统进程信息的命令,但是用处有点儿不同 1.ps命令--提供系统过去信息的一次性快照 也就是说ps命令能够查看刚刚系统的进程信息  命令:ps aux或 ...

  8. Java中的finally

    基础用法: int f1() { try{ return 1; }finally { System.out.println("finall执行"); } } @Test publi ...

  9. js字符串去掉所有空格

    字符串去掉所有空格 "abc 123 def".replace(/\s/g, "") 字符串去掉左右两端空格 " abc 123 def " ...

  10. 【CSS】非常简单的css实现div悬浮页面底部

    <div id="demo_div"></div> <style> #demo_div{ left:; position: fixed; bot ...