For example, there must be attributes that would be specific to diferent species (dog vs. cat). Otherwise why bother. What would be the purpose of modeling them as subtypes in the example provided if they had no subtype specific attributes?
But there are no such attributes in the example model. This additional complexity is an extremely common scenario, and actually the reason why an entity would be sub-typed in the first place.
A few more realistic complexities added to this model IMHO would make the discussion much more useful (I'm sure we could all easily think of a few more typical complexities. Another would be optional attributes).