Краткий ответ: потому что вы программируете против абстракции, а не против конкретной реализации. Это делает ваш код гибким, тестируемым и устойчивым к изменениям. И да — это напрямую связано с принципами SOLID, особенно с Принципом подстановки Барбары Лисков (LSP) и Принципом инверсии зависимостей (DIP). Давайте разберёмся подробно — с примерами, теорией и практическими последствиями. В Java интерфейс (List, Map, Set) — это контракт: он описывает, что объект может делать, но не как он это делает. А реализация (ArrayList, LinkedList, HashMap) — это конкретный способ выполнения этого контракта. Когда вы пишете: List<String> names = new ArrayList<>(); — вы говорите: «Мне нужен объект, который умеет делать всё, что обещает List. Как именно он это делает — меня пока не волнует». А когда вы пишете: ArrayList<String> names = new ArrayList<>(); — вы привязываетесь к конкретной реализации. Вы говорите: «Мне нужен именно ArrayList, и только он». На первый взгляд — без разницы. Но на практике э
Почему нужно писать List list = new ArrayList<>();, а не ArrayList list = new ArrayList<>();
25 января25 янв
3 мин