isAssignableFrom方法具有什么功能呢?
下文笔者讲述isAssignableFrom()方法的功能简介说明
isAssignableFrom()方法简介
isAssignableFrom()方法: 这是一个native方法,他是Class类对象中的一个方法 isAssignableFrom()方法的功能: 用于检测一个类是否继承于一个类 例: A.isAssignableFrom(B) 确定一个类(B)是不是继承来自于另一个父类(A) 一个接口(A)是不是实现了另外一个接口(B)或两个类相同例:
父子继承关系测试 class A{ } class B extends A{ } class C extends B{ } public class test { public static void main(String[] args) { A a = new A(); B b = new B(); B b1 = new B(); C c = new C(); System.out.println(a.getClass().isAssignableFrom(a.getClass())); System.out.println(a.getClass().isAssignableFrom(b.getClass())); System.out.println(a.getClass().isAssignableFrom(c.getClass())); System.out.println(b1.getClass().isAssignableFrom(b.getClass())); System.out.println(b.getClass().isAssignableFrom(c.getClass())); System.out.println("====================================="); System.out.println(A.class.isAssignableFrom(a.getClass())); System.out.println(A.class.isAssignableFrom(b.getClass())); System.out.println(A.class.isAssignableFrom(c.getClass())); System.out.println("====================================="); System.out.println(Object.class.isAssignableFrom(a.getClass())); System.out.println(Object.class.isAssignableFrom(String.class)); System.out.println(String.class.isAssignableFrom(Object.class)); } } 运行结果如下: true true true true true ===================================== true true true ===================================== true true false
从以上代码上可以看出 C继承于B B继承于A 那么任何一个类都可以isAssignableFrom其本身 父类可以由子类装换而来也是没有问题的 所以A可以由B装换而来,同时也可以由子类的子类转换而来例:接口的实现关系
interface InterfaceA{ } class ClassB implements InterfaceA{ } class ClassC implements InterfaceA{ } class ClassD extends ClassB{ } public class InterfaceTest { public static void main(String[] args) { System.out.println(InterfaceA.class.isAssignableFrom(InterfaceA.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassB.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassC.class)); System.out.println(ClassB.class.isAssignableFrom(ClassC.class)); System.out.println("============================================"); System.out.println(ClassB.class.isAssignableFrom(ClassD.class)); System.out.println(InterfaceA.class.isAssignableFrom(ClassD.class)); } } 输出结果如下: true true true false ============================================ true true
B实现了接口A D继承了B 实际上D是可以上转为A接口的 相当于D间接实现了A 这里也说明了一点 其实继承关系和接口实现关系 在isAssignableFrom()的时候是一样的
isAssignableFrom: 是用来判断子类和父类的关系的,或接口的实现类和接口的关系的 默认所有的类的终极父类都是Object 当A.isAssignableFrom(B)结果是true,则说明B可以转换成为A,也就是A可以由B转换而来
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。