Depends. Unfortunately there is no generic solution. Think about your requirements and try to figure out what these things should do. For example, you said in the morning different animals do different stuff. How about you introduce a method `getUp()` or `prepareForDay()` or something like that. Than you can continue with polymorphism and let each animal execute its morning routine. If you want to differentiate among animals, then you should not store them indiscriminately in a list. *If nothing else works, then* you could try the [Visitor Pattern][1], which is [kind-of a hack][2] to allow for kind-of a dynamic dispatching where you can submit a visitor that will receive type-exact callbacks from animals. I would stress however that this should be a last resort if everything else fails. [1]: https://en.wikipedia.org/wiki/Visitor_pattern [2]: https://lostechies.com/derekgreer/2010/04/19/double-dispatch-is-a-code-smell/