This week's book giveaway is in the OCPJP forum. We're giving away four copies of OCA/OCP Java SE 7 Programmer I & II Study Guide and have Kathy Sierra & Bert Bates on-line! See this thread for details.
It is bad because if you add another Animal class to the program, you have to modify the doSomething method too.
When you use polymorphism (getting rid of using the instanceof operator) you would not have to change the doSomething method when you add another animal, and it would still work correctly.
Suppose that you have a large and complicated system and a new programmer gets assigned the task of adding a new Animal class. The new programmer could easily miss the fact that he must also change the doSomething method. Especially if this construction is used in multiple places in the software, it's hard to be sure that you've added support for the new Animal class in all places where it's necessary. So, using the instanceof approach leads to a code maintenance problem.
Remember that a constructor doesn't actually instantiate an object. It initialises an object that's been instantiated. So there's no reason for an abstract class not to use one, and (as John's example shows) it may be needed to initialise data belonging to the abstract class.