继承、实现关系判断 instanceof, isinstance,isAssignableFrom

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);
    }

}

猜你喜欢

转载自blog.csdn.net/dengjili/article/details/80021625