Por que ArrayList implementa IList, ICollection, IEnumerable?

ArrayList declara que implementa oIList, ICollectioneIEnumeralbe interfaces.

Por que não apenas implementarIList, PorqueIList também é derivado deICollectioneICollection é derivado deIEnumerable.

Qual é o propósito desse tipo de declaração? Existem muitos casos como este no .NET BCL.