isAssignableFrom方法的功能简介说明

转发:

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转换而来 
 
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值