I don't know how a superclass could decide which child class to intantiate if there isn't some sort of "case"-type logic in the superclass constructor.
But in Python, for example, it isn't the superclass which decides, usually. The interpreter passes the target subclass (as an argument) to the superclass constructor. In most cases (if you're not mucking about with metaclasses), the superclass doesn't have to do the switching.
In the case of overriding methods, the interpreter walks the MRO (superclass heirarchy) of the object instance at runtime to figure out which method to run.
If anyone knows how Java or C# do it, I'd love to be enlightened. :)