In Layman's words:
The same reason electric apliances makers built their products with electrical plugs instead of simply peeled out cables, and houses come with wall sockets instead of peel out cables sticking out of the wall.
By using standard plugs instead, they allow to plug the same apliances in any compatible plug around the house.
From the point of view of the wall socket, it doesn't matter whether you plug a TV set or a stereo.
That makes both the appliance and the socket more useful.
Take for example a method that accepts a Map as an argument.
The method willl work regardless of you passing a HashMap or a LinkedHashMap to it, as long it's a subclass of Map.
That's Liskov substitution principle.
In the sample code you gave, it means you can later, for some reason, change the concrete implementation of Hash and you will not need to change the rest of the code.
The problem with software is that, since it's relatively easy to change things later with no waste of bricks or mortar, people assume that kind of fore-thought is not worth the while. But reality has showed us that software maintenance is very expensive.