Reiter

Here, we have a set of more abstract classes, representing both phylogenetic ("tree of life") and functional categories. Additionally, some of those classes can be children of others, such as "hunter" and "aquahunter"

We can then implement a highly specific class that inherits from all those previously created classes, and gets all of their functionalities that apply to it.

This way we can create many distinct classes such as "KillerWhale" without re-writing shared methods over and over again, improving our code structure and maintainability.