This relationship can be explicitly coded in the subject, but this requires knowledge about, how the observers should be updated. A change in the object will result in the others receiving a notification, enabling them to update themselves accordingly.
Dependency allows an observer object to register an interest in ALL aspects of another object.
The observer then has to sort out what actually changed at runtime so it can do something sensible in response. Events allow an observer to be interested in a specific aspect of a publisher and even request that a particular message is routed to them. Then, when the publisher triggers an event the routing and any message adaptation is automatic. Clearly there is a trade off. Dependency is easy and fast to set up at initialization time and has a simple and fast mechanism underneath.