Interfaces are the backbone of good application design. Interfaces emphasize type rather than implementation. By programming to interfaces rather than to concrete implementations, you increase the flexibility in your applications. This flexibility comes about because of the reduction of dependency on implementation. When you program to interfaces, you can change the implementation of a class as long as you don't change the interface. That means that you can make significant changes without breaking your application, and even if you introduce an error, the error is generally isolated instead of cascading to other structures in the program. This emphasis on programming to interfaces is seen throughout the rest of the book.