The most simple link I found was here
http://msdn.microsoft.com/en-us/library/aa645767(v=VS.71).aspx
Even though it is not in Java, you can glean an understanding from it.
Please critique my example of how Virtual Method Invocation may be used in real-world applications
You have a Facebook application where DOG does the following: eat(), sleep(), play(), walk(), run(), rollOver(), and (of course) bark()
So, application is a drop-down which holds type DOG, and the only entries in the drop-down are objects of type DOG, i.e. HOUND, POODLE, BEAGLE, LABORADOR.
You cannot have the drop-down perform, say HOUND.biteMailman(), because that method is not part of DOG (at least, not a well-trained DOG ;-)) . In other words, compiler ensures that all of DOG's children (i.e. HOUND, POODLE, BEAGLE, LABORADOR) can perform the consistent actions as DOG. However during run-time, the children perform DOG's action according to their own implementation (after all, each breed of DOG has a distinct way of doing things)