You can use interfaces to influence package dependencies. Say I want to write a new Swing listener. I must implement an interface defined by Swing. So I depend on Swing, even though Swing is calling me. It would be very bad if Swing depended on me and had to release an update to Swing for every new listener I wrote! The Dependency Inversion Principle of OO design is all about this. That link is to something I wrote, which in turn has a link to Rober Martin's golden font of wisdom.
A good question is never answered. It is not a bolt to be tightened into place but a seed to be planted and to bear more seed toward the hope of greening the landscape of the idea. John Ciardi