a
がb
のサブクラスであるかどうかをテストするにはどうすればよいですか?
Class<?> a = A.class;
Class<?> b = B.class;
何方をお探しですか:
Super.class.isAssignableFrom(Sub.class)
Class
が別の拡張であるかどうかを知りたい場合は、 Class#isAssignableFrom(Class) を使用します。たとえば、次のようになります。
if(B.class.isAssignableFrom(A.class)) { ... }
インスタンスが特定のタイプであるかどうかに関心がある場合は、instanceof
を使用します。
A obj = new A();
if(obj instanceof B) { ... }
クラス/インスタンスが型階層のメンバーであり、スーパークラス/サブクラスの直接の関係に制限されていない場合、これらは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);