And you might consider a combination of the two using Adapter
patterns:
Uh-oh, 200 classes down the road I realize I need to add a 'dropWaste(int size)' method
Now for those implementations deriving from AnimalAdapter that don't need a special version of 'dropWaste' I don't need to modify them. If some animals needs a special implementation of dropWaste I still have to edit those special animals, though. Callers don't care. And, if I come into a multiple - inheritance situation I can implement the Animal interface directly, rather than extend the AnimalAdapter.
A down side is that if all/most of my Animals need a special implementation of dropWaste then I don't get a fancy compile-time warning saying the method wasn't added to the class. The compiler error can save a lot of bugs in the run-time by reminding you of things like this.