How to test if one java class extends another at runtime? How to test if one java class extends another at runtime? java java

How to test if one java class extends another at runtime?


Are you looking for:

Super.class.isAssignableFrom(Sub.class)


If you want to know whether or not a Class extends another, use Class#isAssignableFrom(Class). For your example, it would be:

if(B.class.isAssignableFrom(A.class)) { ... }

If you're interested in whether or not an instance is of a particular type, use instanceof:

A obj = new A();if(obj instanceof B) { ... }

Note that these will return true if the class/instance is a member of the type hierarchy and are not restrictive to direct superclass/subclass relationships. For example:

// if A.class extends B.class, and B.class extends C.classC.class.isAssignableFrom(A.class); // evaluates to true// ...and...new A() instanceof C; // evaluates to true

If you want to check for direct superclass/subclass relationships, Tim has provided an answer as well.


You want to know if b is assignable from a:

b.isAssignableFrom(a);

Additionally, if you want to know that a is a direct subclass of b:

a.getSuperclass().equals(b);