Список - это интерфейс. Это дает объекту поведение. ArrayList в этом случае является реализацией. Но это может быть и любой другой объект, который реализует интерфейс List. Вектор является еще одним примером.
В этом случае Vector работает почти так же, как ArrayList, но синхронизируется. Если вам нужен параллелизм, вы, вероятно, собираетесь использовать Vector, но он имеет свою цену. Это немного медленнее, чем ArrayList.
Если вы когда-нибудь работали в Java Mobile, вы увидите, что у вас есть только Vector и нет ArrayList.
ArrayList может быть коллекцией для чего угодно, однако вы устанавливаете тип в своем объявлении, поэтому он будет ожидать этот тип при извлечении объектов из списка. Если вам нужно что-то еще, вам придется делать кастинг.