The more the structure of a running system has the ability to differ from it's static structure, the harder it is to understand that system from the source code.
If an object communicates with either an interface an abstract object, then you can't easily see what is going to happen simply by reading the source code.

Inspiration: Graham King