Why is this a good practice to create objects using references in the upper level in inheritance hierarchy in object oriented programming, as I keep coming across this tendency in most professionally written codes.
e.g
List<Integer> list = new ArrayList<Integer>();