krembrule2016
@krembrule2016

Зачем ссылку на объект с реализацией интерфейса помещать в переменную типа этого интерфейса?

Здравствуйте!
Для решения одной задачи мне показали некоторый код, в котором использовались коллекции. Начал читать про них, общую картину сформировал, но некоторые моменты остались неясными.
final Set<KeyCode> codes = new HashSet<>();
Класс HashSet - это ведь реализация интерфейса Set, т.е. он содержит в себе реализации методов, которые содержатся в интерфейсе Set. (я это правильно понимаю?)
Почему мы создаем переменную типа интерфейса, чтобы она ссылалась на объект, класс которого реализует этот самый интерфейс?
Почему мы не можем и не должны написать просто
final HashSet<KeyCode> codes = new HashSet<>();
Уже много чего прочитал про коллекции, посмотрел видео-уроки, но все равно все как в тумане.
  • Вопрос задан
  • 114 просмотров
Решения вопроса 1
leahch
@leahch
3Д специалист. Долго, Дорого, Дерьмово.
Для того, чтобы передавать не конкретный класс, а интерфейс. Тогда мы не будем зависеть от конкретной реализации интерфейса. В принципе, если внутри метода мы используем только реализацию класса, то интерфейс можно и не тянуть.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы