如何测试 a是否是 b的子类?
a
b
Class<?> a = A.class; Class<?> b = B.class;
你是否在寻找:
Super.class.isAssignableFrom(Sub.class)
如果你想知道一个 Class是否扩展了另一个,使用 Class # isAssignableFrom (Class)。例如:
Class
if(B.class.isAssignableFrom(A.class)) { ... }
如果您对实例是否属于特定类型感兴趣,请使用 instanceof:
instanceof
A obj = new A(); if(obj instanceof B) { ... }
注意,如果类/实例是类型层次结构的成员,并且不限于直接的超类/子类关系,那么它们将返回 true。例如:
true
// if A.class extends B.class, and B.class extends C.class C.class.isAssignableFrom(A.class); // evaluates to true // ...and... new A() instanceof C; // evaluates to true
如果您想检查直接的超类/子类关系,也可以检查 Tim 已经给出了答案。
你想知道如果 b 是可转让的 a:
b.isAssignableFrom(a);
另外,如果你想知道 a是 b的一个直接子类:
a.getSuperclass().equals(b);