This will be a bit hard to explain without a whiteboard but I'll have a go

Suppose I want to conceptually model a network of flights between airports. No problem I use a class called "Airport" and a "recursive" association called flight. A recursive association is one that connects two instances of the same class. In other words both ends of the associaiton touch the same class. Both ends of the association have 0..* multiplicity.
Most conceptual modellers will instantly recognise that this model fragement represents a network. Now the fun starts. Where do I put the atribute for distance between airports? The problem is that I can't capture this attribute in the basic model.
OK. I introduce a second class called "Flight" and have two associations between "Airrport" and "Flight". One association is called "Depart" and the other is called "Arrive". The "Airport" end of both associations has a multiplicity of 1 and the "Flight" ends a multiplicity of 0..* (closed or airports under construction do not have flights).
Many conceptual modellers will still recognise this as a network. Now where do I put the operation to display arrivals and departures. "Airport"? Possible. I would need displayArrivals() and displayDepartures(). But what about "transit" airports? I don't want to display these on my arrivals or depatures boards. OK I could add another association between "Airport" and "Flight" called "Transit". Getting messy. What about alternate airports for flights that are diverted etc etc.
A better apporach is to create an "abstract" class "AirportRole" with an operations display(). This class has an association with "Airport" and "Flight". It also has three specialised (sub-)classes "Depart", "Arrive" and "Transit". These specialised classes all inherit the display() operation but implement it differently.
If I tell "Depart" to display() it displays departures, if I ask "Arrive" to display() it displays arrivals, if I ask "Transit" to display it does nothing or returns an error. This is "polymorphism".
However, very few conceptual modellers would now instantly recognise this as a network. Enter the collaboration element. If I create a collaboration element, label it "Network" and connect it to "Airport", "AirportRole" and "Flight" it becomes perfectly obvious that we are dealing with a network.
Phil.