JAVA反射之isAssignableFrom()与instanceof关键字的用法
isAssignableFrom() 与 instanceof 关键字,这两种方式是常用的判断继承关系的方式,它们的区别在于:
- isAssignableFrom() 是 Class 类中的方法,而 instanceof 是 JAVA 关键字
- isAssignableFrom() 的使用对象是 Class,而 instanceof 的使用对象是对象实例
两者的用法如下,具体使用哪个方法就得看当前拥有的是对象实例还是只有 Class
// isAssignableFrom() 的使用方法
父类.class.isAssignableFrom(子类.class)
// instanceof 的使用方法
子类实例 instanceof 父类类型
代码验证
创建一个接口
public interface A {}
创建一个实现类
public class B implements A {}
测试
public class Test {
public static void main(String[] args) {
System.out.println(B.class.isAssignableFrom(B.class));
System.out.println(A.class.isAssignableFrom(B.class));
B b = new B();
System.out.println(b instanceof A);
System.out.println(b instanceof B);
System.out.println(B.class.isAssignableFrom(b.getClass()));
System.out.println(A.class.isAssignableFrom(b.getClass()));
}
}
结果为
true
true
true
true
true
true
通过代码可以看出,如果不想用 instanceof,也是可以转换为使用 isAssignableFrom() 方法的,但是反过来就不行了。