The two ways (using an interface and an abstract class) are ALMOST identical and both will work fine. When you would use one over the other is answered by the question of Do you want to provide 'default' functionality to each object? If the answer is yes then use inheritance, if no then use an interface. So if the content of each objects eat method is going to be the same then use a base class, since it can pass along that same code and cuts out repeatative code. If the content of the eat method is going to be different on most of the objects then use an interface since it just dictates that there IS an eat method not what it does.

Speaking of patterns, is there any pattern that deal with this? It is a fashinating subject I think...
That deals with what exactly?