isAssignableFrom方法具有什么功能呢?

莱莱  金牌会员 | 2022-8-27 20:40:12 | 显示全部楼层 | 阅读模式
打印 上一主题 下一主题

主题 890|帖子 890|积分 2670

转自:
http://www.java265.com/JavaCourse/202205/3348.html
下文笔者讲述isAssignableFrom()方法的功能简介说明
isAssignableFrom()方法简介
  1. isAssignableFrom()方法:
  2.        这是一个native方法,他是Class类对象中的一个方法
  3. isAssignableFrom()方法的功能:
  4.        用于检测一个类是否继承于一个类
  5. 例:
  6. A.isAssignableFrom(B)
  7. 确定一个类(B)是不是继承来自于另一个父类(A)
  8. 一个接口(A)是不是实现了另外一个接口(B)或两个类相同   
复制代码
例:
  1. 父子继承关系测试
  2. class A{
  3. }
  4. class B extends A{
  5. }
  6. class C extends B{
  7. }
  8. public class test {
  9.     public static void main(String[] args) {
  10.         A a = new A();
  11.         B b = new B();
  12.         B b1 = new B();
  13.         C c = new C();
  14.         System.out.println(a.getClass().isAssignableFrom(a.getClass()));
  15.         System.out.println(a.getClass().isAssignableFrom(b.getClass()));
  16.         System.out.println(a.getClass().isAssignableFrom(c.getClass()));
  17.         System.out.println(b1.getClass().isAssignableFrom(b.getClass()));
  18.         System.out.println(b.getClass().isAssignableFrom(c.getClass()));
  19.         System.out.println("=====================================");
  20.         System.out.println(A.class.isAssignableFrom(a.getClass()));
  21.         System.out.println(A.class.isAssignableFrom(b.getClass()));
  22.         System.out.println(A.class.isAssignableFrom(c.getClass()));
  23.         System.out.println("=====================================");
  24.         System.out.println(Object.class.isAssignableFrom(a.getClass()));
  25.         System.out.println(Object.class.isAssignableFrom(String.class));
  26.         System.out.println(String.class.isAssignableFrom(Object.class));
  27.     }
  28. }
  29. 运行结果如下:
  30. true
  31. true
  32. true
  33. true
  34. true
  35. =====================================
  36. true
  37. true
  38. true
  39. =====================================
  40. true
  41. true
  42. false
复制代码
  1. 从以上代码上可以看出
  2. C继承于B
  3. B继承于A
  4. 那么任何一个类都可以isAssignableFrom其本身
  5. 父类可以由子类装换而来也是没有问题的
  6. 所以A可以由B装换而来,同时也可以由子类的子类转换而来
复制代码
例:接口的实现关系
  1. interface InterfaceA{
  2. }
  3. class ClassB implements InterfaceA{
  4. }
  5. class ClassC implements InterfaceA{
  6. }
  7. class ClassD extends ClassB{
  8. }
  9. public class InterfaceTest {
  10.     public static void main(String[] args) {
  11.         System.out.println(InterfaceA.class.isAssignableFrom(InterfaceA.class));
  12.         System.out.println(InterfaceA.class.isAssignableFrom(ClassB.class));
  13.         System.out.println(InterfaceA.class.isAssignableFrom(ClassC.class));
  14.         System.out.println(ClassB.class.isAssignableFrom(ClassC.class));
  15.         System.out.println("============================================");
  16.         System.out.println(ClassB.class.isAssignableFrom(ClassD.class));
  17.         System.out.println(InterfaceA.class.isAssignableFrom(ClassD.class));
  18.     }
  19. }
  20. 输出结果如下:
  21. true
  22. true
  23. true
  24. false
  25. ============================================
  26. true
  27. true
复制代码
  1. B实现了接口A
  2. D继承了B
  3. 实际上D是可以上转为A接口的
  4. 相当于D间接实现了A
  5. 这里也说明了一点
  6. 其实继承关系和接口实现关系
  7. 在isAssignableFrom()的时候是一样的
复制代码
  1. isAssignableFrom:
  2. 是用来判断子类和父类的关系的,或接口的实现类和接口的关系的
  3.   默认所有的类的终极父类都是Object
  4. 当A.isAssignableFrom(B)结果是true,则说明B可以转换成为A,也就是A可以由B转换而来
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

莱莱

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表