An adaptation of a talk given by John Brewer at the April 2001 meeting of the Marin Java Discussion Group . Rather than directly manipulating an object's data, other objects send requests to the the object, in the form of messages, some of which the object may respond to by altering its internal state.
Polymorphism means that objects of different classes can be used interchangeably.
This is especially important, as it allows you to hook up classes at a later date in ways you didn't necessarily foresee when those classes were first designed. You can program using an object-oriented approach in just about any language. For example in C, you can implement encapsulation with pointers to privately defined structs, polymorphism with function pointers, and inheritance by somewhat trickier use of those same function pointers. This paper deals primarily with polymorphism. Ward Cunningham has said the Polymorphism is the object-oriented programmer's edge.