Okay, this one is a bit easier to express:
If you declare something as taking a type, any instance of that type should be usable there.
Or, to put it another way, a Stock object is always a Stock object, it's never a cow. The calculateValue() method should always calculate the value, never fire a nuclear missile. This is the Liskov Substitution principle, and is basically an injunction against creating objects that pretend to be one thing for convenience, when they're actually something else.
There's a very easy way to violate Liskov without noticing: check the type of an instance. Nearly always, if...