Интерфейсная переменная
Во многих примерах кода объявляется ссылочная переменная интерфейса, которая ссылается на объект класса реализующий этот интерфейс. К примеру:
List <String> StringCollection = new ArrayList<>();
Каковы преимущества такого подхода в сравнении с присваиванию ссылочной переменной тому классу, который этот же объект и реализует? Т.е. :
ArrayList <String> StringCollection = new ArrayList<>();
Ответы (1 шт):
Почему мы используем интерфейсы при объявлении переменной, потому что мы хотим абстрагироваться от конкретной реализации данного интерфейса. Методы интерфейса все чисто виртуальные и поэтому можно использовать полиморфизм. То есть кодирование с помощью интерфейсов позволяет внедрять нежесткую связь между классами. Вы можете в любой момент подменить реализацию и в вашем коде не нужно будет делать изменений.
То, что касается интерфейса List и его реализации ArrayList, то это одна из популярных коллекций, наиболее часто встречающаяся в коде. Если используется только одна реализация и в будущем никто не собирается ее менять, то можно использовать ArrayList типом переменной. Тогда вы точно будете знать класс используемой переменной.