This week's giveaway is in the EJB and other Java EE Technologies forum. We're giving away four copies of EJB 3 in Action and have Debu Panda, Reza Rahman, Ryan Cuprak, and Michael Remijan on-line! See this thread for details.
If a class has a reference to an interface (rather than a concrete implementing class), it does not need to know anything about the actual object passed in and it allows you to pass in any class that implements the specified interface so its really flexible.
As an example, the List interface. If you write a bunch of methods that accept a parameter of type java.util.List, you can pass in any type of list like ArrayList or LinkedList and you dont need to change the methods themselves. However, if defined all the methods with ArrayList instead and then in two weeks time you decided a LinkedList performed better, you would need to change each method to accept LinkedList rather than ArrayList.
hope this helps