Perché le variabili dichiarate con il loro nome di interfaccia in Java?

Questa è una vera domanda per principianti (sto ancora imparando le basi Java).

Posso (un po ‘) capire perché i metodi restituiscono un elenco piuttosto che un ArrayList o perché accettano un parametro List anziché un ArrayList. Se non fa alcuna differenza per il metodo (cioè, se non sono richiesti metodi speciali da ArrayList), ciò renderebbe il metodo più flessibile e più facile da usare per i chiamanti. La stessa cosa vale per altri tipi di raccolta, come Set o Mappa.

Quello che non capisco: sembra essere una pratica comune creare variabili locali come questa:

List list = new ArrayList(); 

Mentre questa forma è meno frequente:

 ArrayList list = new ArrayList(); 

Qual è il vantaggio qui?

Tutto quello che posso vedere è uno svantaggio minore: deve essere aggiunta una riga “import” separata per java.util.List. Tecnicamente, “import java.util. *” Potrebbe essere usato, ma non lo vedo molto spesso, probabilmente perché le linee di “importazione” vengono aggiunte automaticamente da qualche IDE.