Check if a class extends another at Runtime : Java

Inheritance Checks — Quick Reference

  • Class.isAssignableFrom(Class) tells you if the argument class is the same as, a subclass of, or implements the target class
  • It also returns true when both classes are identical
  • Use the instanceof operator to check if an object is an instance of a specific class or interface
  • To verify a direct superclass, compare getSuperclass() with the candidate

Set Up a Minimal Hierarchy

We’ll work with an interface MyInterface and three classes: MyBaseClass, MySubClass and SomeOtherClass.

interface MyInterface {
}

class MyBaseClass implements MyInterface {
}

class MySubClass extends MyBaseClass {
}

class SomeOtherClass {
}   

Try It Out

   

public class Test {
  
  public static void main( String[] args ) {
    
    // Check class‑to‑class relationships with isAssignableFrom
    System.out.println( MyBaseClass.class.isAssignableFrom( MyBaseClass.class ) );// true — same class
    System.out.println( MyBaseClass.class.equals( MyBaseClass.class ) );// true — equals check
    System.out.println( MyBaseClass.class.isAssignableFrom( MySubClass.class ) );// true — superclass
    System.out.println( MyInterface.class.isAssignableFrom( MySubClass.class ) );// true — superinterface
    System.out.println( MyBaseClass.class.isAssignableFrom( SomeOtherClass.class ) );// false — unrelated
    System.out.println( MySubClass.class.isAssignableFrom( MyBaseClass.class ) );// false — parent not assignable from child
    
    // Check object instance with instanceof
    MyInterface object = new MyBaseClass();
    System.out.println( object instanceof MyInterface ); // true
    System.out.println( object instanceof MyBaseClass ); // true
    System.out.println( object instanceof MySubClass ); // false
    System.out.println( object instanceof SomeOtherClass );// false
    
    // Check direct superclass
    System.out.println( MySubClass.class.getSuperclass().equals( MyInterface.class ) );// false — interface, not a direct superclass
    System.out.println( MyBaseClass.class.getSuperclass().equals( MyInterface.class ) );// false — same reason
    System.out.println( MySubClass.class.getSuperclass().equals( MyBaseClass.class ) );// true — MyBaseClass is the direct parent
  }
}
   

Complete Working Example

   

public class Test {
  
  public static void main( String[] args ) {
    
    // Check class‑to‑class relationships with isAssignableFrom
    System.out.println( MyBaseClass.class.isAssignableFrom( MyBaseClass.class ) );// true — same class
    System.out.println( MyBaseClass.class.equals( MyBaseClass.class ) );// true — equals check
    System.out.println( MyBaseClass.class.isAssignableFrom( MySubClass.class ) );// true — superclass
    System.out.println( MyInterface.class.isAssignableFrom( MySubClass.class ) );// true — superinterface
    System.out.println( MyBaseClass.class.isAssignableFrom( SomeOtherClass.class ) );// false — unrelated
    System.out.println( MySubClass.class.isAssignableFrom( MyBaseClass.class ) );// false — parent not assignable from child
    
    // Check object instance with instanceof
    MyInterface object = new MyBaseClass();
    System.out.println( object instanceof MyInterface ); // true
    System.out.println( object instanceof MyBaseClass ); // true
    System.out.println( object instanceof MySubClass ); // false
    System.out.println( object instanceof SomeOtherClass );// false
    
    // Check direct superclass
    System.out.println( MySubClass.class.getSuperclass().equals( MyInterface.class ) );// false — interface, not a direct superclass
    System.out.println( MyBaseClass.class.getSuperclass().equals( MyInterface.class ) );// false — same reason
    System.out.println( MySubClass.class.getSuperclass().equals( MyBaseClass.class ) );// true — MyBaseClass is the direct parent
  }
}

interface MyInterface {
}

class MyBaseClass implements MyInterface {
}

class MySubClass extends MyBaseClass {
}

class SomeOtherClass {
}