def is_instance_of(obj, class_or_intf_name):
    """
    Checks whether the Java object implements the specified interface or is a subclass of the superclass.

    :param obj: the Java object to check
    :type obj: JB_Object
    :param class_or_intf_name: the superclass or interface to check, dot notation or with forward slashes
    :type class_or_intf_name: str
    :return: true if either implements interface or subclass of superclass
    :rtype: bool
    """
    class_or_intf_name = class_or_intf_name.replace("/", ".")
    classname = get_classname(obj)
    # array? retrieve component type and check that
    if is_array(obj):
        jarray = JavaArray(jobject=obj)
        classname = jarray.component_type()
    result = javabridge.static_call(
        "Lweka/core/InheritanceUtils;", "isSubclass",
        "(Ljava/lang/String;Ljava/lang/String;)Z",
        class_or_intf_name, classname)
    if result:
        return True
    return javabridge.static_call(
        "Lweka/core/InheritanceUtils;", "hasInterface",
        "(Ljava/lang/String;Ljava/lang/String;)Z",
        class_or_intf_name, classname)
Checks whether the Java object implements the specified interface or is a subclass of the superclass.

    :param obj: the Java object to check
    :type obj: JB_Object
    :param class_or_intf_name: the superclass or interface to check, dot notation or with forward slashes
    :type class_or_intf_name: str
    :return: true if either implements interface or subclass of superclass
    :rtype: bool