I think you can do what you're trying to do, just not EXACTLY the way you're thinking of doing it. Your AnimalPool is going to be essentially an Animal "factory" (look up factory pattern, it may help, but it's not the important part here.), AND double as a collection of "Animals". Make a "Animal" object, which has all the methods and properties common across all animals. Then make the animals you need such as "Cat" and "Dog" and derive them from the base class of "Animal". Then in your "AnimalPool", add functions to create and return specific types of Animal, such as getDog() and getCat(), or make one function with a parameter. Create that specific type with your AnimalPool factory, and because it derives from "Animal", you can add it to a list of type "Animal". When you retrieve Animals from the AnimalPool list, you will be able to cast them to their appropriate types. Depending on the reflection capabilities of your language, you may even be able to get the object to tell you what type it is.
This is just simple case of using inheritance and a factory pattern. Look those two things up, and I think you'll be on easy street with what you're trying to accomplish. Good luck, and hope it helps. I can give you a code sample if you need it. :-)