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 {
}