I generally understand interfaces, inheritance and polymorphism, but one thing has me puzzled.
In this example, Cat implements IAnimal
You can achieve that using LINQ:
IList cats = new List().Cast();