isAssignableFrom()方法是从类继承的角度去判断,判断是否为某个类的父类。
instanceof()方法是从实例继承的角度去判断,判断是否某个类的子类。
Father是Son的父类:true
Son 是Father的父类:false
father是Father的实例:true
son是Father的实例:true
father是Son的实例:false
instanceof()方法是从实例继承的角度去判断,判断是否某个类的子类。
例如:Class1.isAssignableFrom(Class2) 是用来判断一个类Class1和另一个类Class2是否相同或是另一个类的子类或接口。 调用者和参数都是java.lang.Class类型;obj instanceof TypeName 是用来判断一个对象实例是否是一个类或接口的或其子类子接口的实例, 第一个参数是对象实例名,第二个参数是具体的类名或接口名。
demo:
public class Father {
}
public class Son extends Father {
}
public class Test {
private static final String TAG = MainActivity.class.getSimpleName();
public void test() {
Father father = new Father();
Son son = new Son();
Log.e(TAG, "Father是Son的父类:" + Father.class.isAssignableFrom(son.getClass()));
Log.e(TAG, "Son 是Father的父类:" + Son.class.isAssignableFrom(father.getClass()));
Log.e(TAG, "father是Father的实例:" + (father instanceof Father));
Log.e(TAG, "son是Father的实例:" + (son instanceof Father));
Log.e(TAG, "father是Son的实例:" + (father instanceof Son));
}
}
输出结果:
Father是Son的父类:true
Son 是Father的父类:false
father是Father的实例:true
son是Father的实例:true
father是Son的实例:false