Interfaces are the best way to maintain well decoupled constructs.
When writing tests, you will find that concrete classes will not work in your test environment.
Example: You want to test a class that depends on a Data Access Service class. If that class is talking to a web service, or database -- your unit test will not run in your test environment ( plus it has turned into an integration test ).
Solution? Use an Interface for your Data Access Service and Mock that interface so you can test your class as a unit.
On the other hand, WPF & Silverlight do not play at all with Interfaces when it comes to binding. This is a pretty nasty wrinkle.