Salve, ad esempio potrei scrivere:

codice:
List<String> ciao= new ArrayList<String>();
Istanzio cioè un oggetto di tipo ArrayList ma lo metto in un riferimento di tipo List (che dovrebbe essere una superclasse...giusto?).
In questo modo uso i metodi della superclasse...non quelli di ArrayList.
che vantaggio ne posso trarre? Ovvero quali sono le differenze rispetto a:

codice:
List<String> ciao= new List<String>();
oppure:

codice:
ArrayList<String> ciao= new ArrayList<String>();

grazie a tutti