Getting the name of a sub-class from within a super-class-Collection of common programming errors

The superclass should not even know of the existence of the subclass, much less perform operations based on the fully qualified name of the subclass. If you do need operations based on what the exact class is, and can’t perform the necessary function by inheritance, you should do something along these lines:

public class MyClassUtil
{
    public static String doWorkBasedOnClass(Class clazz)
    {
        if(clazz == MyNormalClass.class)
        {
            // Stuff with MyNormalClass
            // Will not work for subclasses of MyNormalClass
        }

        if(isSubclassOf(clazz, MyNormalSuperclass.class))
        {
            // Stuff with MyNormalSuperclass or any subclasses
        }

        // Similar code for interface implementations
    }

    private static boolean isSubclassOf(Class subclass, Class superclass)
    {
        if(subclass == superclass || superclass == Object.class) return true;

        while(subclass != superclass && subclass != Object.class)
        {
            subclass = subclass.getSuperclass();
        }
    }
}

(Untested code)

This class doesn’t know about its own subclasses, either, but rather uses the Class class to perform operations. Most likely, it’ll still be tightly linked with implementations (generally a bad thing, or if not bad it’s not especially good), but I think a structure like this is better than a superclass figuring out what all of its subclasses are.