Зачем использовать в качестве типа переменной интерфейс?
Ребят, выручайте!
При изучении паттернов проектирования неоднократно сталкиваюсь, когда в примерах кода в листингах в качестве некоторых типов переменных используется интерфейс (объекты- экземпляры классов, реализующие этот интерфейс.) Скажите, какие преимущества такого подхода, что это даёт, как это используется на практике? Почему нельзя в качестве типа переменной указывать просто класс, реализующий этот интерфейс?
Понимаю, что это как то расширяет возможности, но как ? вопрос скорее всего глупый, но все же.
Интерфейс дает возможность использовать все реализующие его классы без изменения кода класса, где используются подклассы этого интерфейса (звучит криво, но вчитайтесь :) )
А суть паттернов в двух словах - свести к минимуму кол-во изменений существующего кода при добавлении новой функциональности.
Еще про SOLID принципы почитайте, тоже будет полезно.
Если тебе нужна просто коллекция с методами, описанными в интерфейсе, и не важна реализация этой коллекции, то нужно использовать в качестве типа переменной интерфейс List. Это сбережет время и нервы в будущем, если придется поменять реализацию с ArrayList на LinkedList - не придется менять по всей программе ArrayList на LinkedList и можешь быть уверенным, что программа продолжит работать корректно.
Если нужны специфические методы конкретной реализации, то нужно использовать ее.