Jde o to, co myslíte tím hraním s polymorfismem. Já to chápu tak, že byste očekával následující význam:
ArrayList<String> al = new ArrayList<String>();
Jenže většina programátorů chce být na nějaké hrátky s polyformismem připravená, a tak očekávají
List<String> al = new ArrayList<String>();
V tom druhém případě by to ale znamenalo, že by se do popisu jazyka dostala tvrzení jako "třída java.util.ArrayList je implementací rozhraní java.util.List". A to tvůrci jazyka nechtěli.