имплементится от интерфейса List.Но зачем при создании объекта ArrayList указывать ему тип данных List???Ведь тогда этому списку будут доступны только методы с интерфейса List(а методы с абстрактных классов от которых наследуется ArrayList и сами методы определённые в ArrayList не будут доступны).Ну тип зачем делать урезанную версию списков,если можно просто присвоить тип данных ArrayList?
В контексте списков с этого мало плюшек, а в контексте иерархии других классов переменные не завязываются на конкретный инстанс по типу, поэтому в дальнейшем нет проблем сменить его на другой. Читать: полиморфизм , абстракции , lsp
Всм не завязываются по типу???
это делается для того, что когда не нужны конкретные методы класса ArrayList, нам и не обязательно тип переменной такой указывать, ведь это связывает нам руки. представьте метод, который может вернуть ArrayList, а при количестве объектов больше Х возвращает LinkedList. Что тогда?) Вам правильно указали здесь прочитать про полиморфизм, абстракции и SOLID, а конкретно принцип L. Другой пример: у нас в приложении может быть несколько сервисов для подсчета налогов, и в зависимости от локали будет подгружаться сервис той страны, в которой приложуха работает. Тогда в других местах мы просто объявляем НалоговыйКалькулятор и просто пользуемся функционалом, а уж какая именно имплементация подгрузиться - нам не важно.
А типо нет проблем сменить ArrayList на LinkedList,если переменная с типом List будет.Вот что имелось ввиду под не завязываются.Ну я понял спс
Обсуждают сегодня