@KR2_theBest

Почему пишут вот так?

Привет всем.Только учусь.Примерно знаю что такое полиморфизм , но иногда попадаются такие строчки типа List values = new ArrayList(); почему просто не написать ArrayList array = new ArrayList();? Предположим(незнаю точно ли) но если предположить что ArrayList это дитя List то получается что первый вариант получается урезанным.
  • Вопрос задан
  • 650 просмотров
Решения вопроса 1
@nirvimel
Так делается для того, чтобы оставить за собой возможность впоследствии поменять реализацию не меняя интерфейс. Например, в будущем может потребоваться заменить реализацию ArrayList на LinkedList, если бы в качестве типа переменной был указан конкретный класс, то к тому времени код мог бы уже обрасти различными обращениями к, специфическим для конкретного класса, методами, выходящими за границы интерфейса List. В таком случае при замене реализации на LinkedList пришлось бы выискивать в коде и выкорчевывать оттуда все обращения к специфике ArrayList. На сколько это адски сложная задача знают все, кому приходилось работать над крупными проектами. Поэтому люди, знакомые с этой проблемой, предпочитают предупреждать подобные проблемы заранее, то есть во всех местах, где возможна смена реализации в будущем (то есть почти везде), стараются пользоваться исключительно интерфейсами, вместо того, чтобы опираться на конкретные реализации. В данном примере, если в качестве типа переменной был бы использован интерфейс List, то смена реализации ArrayList на LinkedList решалась бы заменой всего одной строки не зависимо от масштабов проекта.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
TwerTrue
@TwerTrue
Молодой и неопытный разработчик
Может стоит сначала разобраться что такое List и что такое ArrayList?
ArrayList — реализует интерфейс List
Ответ написан
OLDRihard
@OLDRihard
Java Developer
Садимся и учим мат. часть. В частности для чего существуют интерфейсы, суперклассы и прочее.
У всех типов коллекций в Яве есть свой интерфейс, реализующий стандартный набор методов взаимодействия с ним. А стандартные классы отличаются способом организации контента внутри себя.
В большинстве случаев в фреймворках не ограничивают людей каким-то определенным видом а просто требуют для ввода универсальный интерфейс List, давая возможность выбрать тот способ, который пользователю удобней (или вобще создать свою собственную реализацию интерфейса)

А за тег NET надо ремнем надавать! Их не для того придумали, чтоб лепить что попало. Вон в одном из ответов уже путаница пошла.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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