仅作记录,实践出真知。
基本介绍
isAssignableFrom:
使用示例:
Class1.isAssignableFrom(Class2)
释义:
① 判断Class1和Class2是否相同。
② Class1是否是Class2的父类或者接口。
instanceof:
使用示例:
object instanceof TypeName
释义:
判断一个对象实例是否是一个类或接口或其子类子接口的实例。只被用于对象引用变量。
isInstance:
使用示例:
Class1.isInstance(Class2)
释义:
这个方法与instanceof等价,其中Class2是被测试的对象,如果Class2是调用这个方法的class或接口的实例,则返回true
测试用例
package com.ray.ch12;
public class Test {
public static void main(String[] args) {
try {
Class<? extends Father> AClass1 = (Class<? extends Father>) Class
.forName("com.ray.ch12.Sub");
System.out.println(AClass1.newInstance() instanceof Sub);
System.out.println(AClass1.newInstance() instanceof Father);
System.out.println(AClass1.isInstance(new Sub()));
System.out.println(AClass1.isInstance(new Father()));
System.out.println(AClass1.isAssignableFrom(Sub.class));
System.out.println(AClass1.isAssignableFrom(Father.class));
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class Father {
}
class Sub extends Father {
}
输出:
true
true
true
false
true
false
总结
1.看上面的代码的时候需要注意:
(1)instanceof参数是类
(2)isInstance后面的参数是类的对象
(3)isAssignableFrom后面的参数是类的Class对象
这三种都是检测对象类型的方法。
2.从输出结果上面看出注意的地方:
(1)instanceof是支持向上转型,因此上面的AClass1也是Father的Class类型
(2)isInstance和isAssignableFrom不支持向上转型,因此输出的时候AClass1只能是指向Sub,而认不出Father。