In addition to other answers, I want to explain one thing which is usually overlooked.
Can interface be implemented by value types? Yes, by structures.
This is a very important fact. It allows for much more flexible form of polymorphism
]), where the polymorphous containers operate so abstract objects (represented by some interface(s)), so the container remains agnostic even to the knowledge of the nature of implementing type, are they classes or not.
Besides, look at the answer by Griff and my comment to it. The types representing be the interfaces can participate in more than one polymorphous relationship requiring different interface types due to weak form of multiple inheritance