However, in the 'real world', you won't always have control like this. Another team may be working on code, and they'll say "we're going to give you a list".
If you find out they are giving you an ArrayList and hard-code it to be such, you are locking in a specific implementation. So you write all your code, relying on it being an ArrayList. The other team then changes their code and returns some other list type. Your code is now broken.
However, if you coded your side to be a List, they can change their code to return ANY list type, and you don't have to change yours at all.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors