Java 中 instanceof 、isAssignableFrom 、 isInstance 之间区别和联系
一、作用和区别
1、 instanceof : Java 中的关键字,判断某个实例是否属于某个类的子类或子接口
2、isAssignableFrom :Java Class类中的方法 ( java.lang.Class.isAssignableFrom(Class<?> )),判断某个类是否为被判断类的父类或父接口。
3、isInstance :Java Class类中的方法( java.lang.Class.isInstance(Object) ),判断某个类是否为被判断的实例的父类或子接口。
二、代码理解
1、定义Parent 类
2、定义Face接口
3、定义Child 类继承Parent类实现Face
4、使用 Child类实例 instanceof Parent类
5、使用 Parent 类 isAssignableFrom Child类
6、使用Face接口isInstance Child类的实例
public static class Parent{
}
public interface Face{
}
public static class Child extends Parent implements Face{
}
public static void main(String[] args) {
Parent p = new Parent();
Child c = new Child() ;
if(c instanceof Parent) {
System.out.println(" c 是Parent 子类");
}
if(Parent.class.isAssignableFrom(Child.class)) {
System.out.println(" child 是Parent 的子类");
}
if(Face.class.isInstance(c)) {
System.out.println(" Face 是 child的父接口");
}
}
三、总结
1、instanceof:用法:c instanceof Parent ,实例c是否为Parent类的子类或子接口。 (是不是你爸爸?)
2、isInstance:用法: Face.class.isInstance(c) , Face类是否为实例c的父类或父接口(是不是你儿子?) ---- 和 instanceof 关键字判断刚刚好相反。
3、isAssignableFrom:用法:Parent.class.isAssignableFrom(Child.class) ,Parent类是否为Child类的父类或父接口。(是不是你儿子?)
4、instanceof 、isAssignableFrom 、 isInstance 都是判断Java中类之间的关系(继承类、实现接口); instanceof 判断是左边是不是右边的儿子 ; isInstance 和 isAssignableFrom 判断的左边是不是右边的爸爸。
5、instanceof 和 isInstance 都是用来判断 类(接口)和实例之间是否存在关系。
6、isAssignableFrom 判断类和类(接口) 之间是否存在关系。