Nella maggior parte del codice Java, vedo le persone dichiarare oggetti Java in questo modo:
Map<String, String> hashMap = new HashMap<>();
List<String> list = new ArrayList<>();
invece di:
HashMap<String, String> hashMap = new HashMap<>();
ArrayList<String> list = new ArrayList<>();
Perché esiste una preferenza per definire l'oggetto Java usando l'interfaccia piuttosto che l'implementazione che verrà effettivamente utilizzata?