转自:
http://www.java265.com/JavaCourse/202205/3348.html
下文笔者讲述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转换而来
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作! |