instanceof
B instanceof A
如果B类型为Class<? extends A>
或者B implements A,返回true
PS:其中B为具体的实例对象
isinstance
功能与instanceof功能一致
A.class.isInstance(B)
如果B类型为Class<? extends A>
或者B implements A,返回true
PS:其中B为具体的实例对象
isAssignableFrom
A.class.isAssignableFrom(B.class)
如果B类型为Class<? extends A>
或者B implements A,返回true
对应例子代码理解
public interface AI {}
public interface BI extends AI {}
public class II implements AI{}
instanceof
public static void main(String[] args) throws IllegalAccessException, Exception {
System.out.println(AI.class.isAssignableFrom(II.class)); //true
System.out.println(II.class.isAssignableFrom(AI.class));// false
Object object = II.class.newInstance();
System.out.println(object instanceof AI); //true
System.out.println(AI.class.isInstance(object)); //false
}
isinstance
public static void main(String[] args) throws IllegalAccessException, Exception {
System.out.println(AI.class.isAssignableFrom(BI.class)); //true
System.out.println(BI.class.isAssignableFrom(AI.class));// false
}
isAssignableFrom
public class A {}
public class B {}
public class TestEquals {
public static void test(Class<A> father, Class<? extends A> son) throws Exception, IllegalAccessException {
System.out.println(father.isAssignableFrom(son)); //true
System.out.println(son.isAssignableFrom(father));// false
Object f = father.newInstance();
Object s = son.newInstance();
System.out.println(s instanceof A); //true
System.out.println(f instanceof B); //false
System.out.println(father.isInstance(s)); //true
System.out.println(son.isInstance(f)); //false
}
public static void main(String[] args) throws IllegalAccessException, Exception {
test(A.class, B.class);
}
}