Ребят, расскажите об абстрактных классах и интерфейсах в популярной форме. А-то я не могу понять как их применять. Ну абстрактные классы еще более-менее, а вот интерфейсы совсем не догоняю. Пожалуйста приведите короткие практические примеры с пояснениями.
Смысл в том, чтобы абстрагироваться от конкретной реализации. Во всех рабочих классах используешь интерфейсы и абстрактные классы, таким образом в любой момент можно заменить реализацию на другую и изменить поведение. Почитайте TDD, там про это хорошо написано.