Its the same -List is just an interface.
You can use both in the same way (perhaps ArrayList has more methods wich you can use).
So if you want it to call it a benefit:
Benefit for Arraylist: you can use each method, that ArrayList offers.
Benefit for List: you can use it everywhere, where just a List is required and allow also other implementations (for example LinkedList).
But remember- an ArrayList is a List so you can treat it also like a List.
The first polymorphic declaration is better. It gives you the freedom to change the list from ArrayList to a different List type such as LinkedList. For e.g. you might want to do this for performance reasons.
This is one of the important thing you learn while learning Object oriented programming "Polymorphism" and in real world software programming it saves lots of maintenance time and you should apply this practice not only on variable declaration but also on method's argument type and method's return type. This is why in Factory pattern return type is SuperClass or Super Interface of what possibly could create() method returns.
Method Overloading makes methods to be defined with different arguments with the same name... But when a method is called which has overloaded versions of methods, compiler will search for a particular method among the overloaded methods and finally select a method to be called during runtime.. that is method to be called is declared in compile time itself...
Polymorphism is not related to Method Overloading ... Polymorphism which allows same entity in different behaviors...
Even in the case of Method Overloading, when a new version of method is added, the client program should also be re-written to call that new version of program matching the arguments of newer version... So, Method Overloading does not lead to the ease of code maintenance....