ArrayListやHashMapをnewする時に、ArrayList list = new ArrayList(); ではなく、
List list = new ArrayList(); というようにインターフェースで宣言するのは何故なのでしょうか?

メソッドの引数ならば分かるのですが、ローカル変数でやる意味が感じられません。
何か違いが分かる良い例は無いでしょうか?