Если в итоге вызываем ArrayList, то зачем объявлять тип List, а не ArrayList? В чём будет разница в работе, можете объяснить, пожалуйста?
Valeria Glinskaya
16 уровень
Зачем объявлять тип List, а не ArrayList?
Решен
Комментарии (8)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Vladimir
14 августа 2025, 15:25
List это интерфейс, ArrayList, LinkedList и тд, это классы наследованные от List, т.е. реализация интерфейса List.
-1
Денис Enterprise Java Developer
14 августа 2025, 16:52полезный
Наследование и реализация это разные термины. Интерфейсы тоже могут наследоваться друг от друга, но никакого отношения к реализации это не имеет
+1
Vladimir
15 августа 2025, 05:06
Для того чтобы класс реализовал интерфейс он должен наследоваться от него, это же очевидно.
-2
hidden #3303140
15 августа 2025, 08:11
Нет, это не только неочевидно, но и в принципе неверно. Класс не может в принципе наследоваться от интерфейса, он может его только реализовывать. Наследование подразумевает доступ к protected методам и полям родителя. Реализация - это исполнение контракта на имплементацию объявленных методов.
+1
Денис Enterprise Java Developer
15 августа 2025, 08:12
Для того чтобы класс реализовывал интерфейс он должен его реализовать, для этого существует конкретный кейворд implements. Наследование происходит через другой механизм и для этого существует кейворд extends, разберёшься в чём разница? :)
Ну и само собой интерфейсы так же могут друг друга экстендить, не переставая быть интерфейсами и ничего не реализовывая.
+1
Денис Enterprise Java Developer
12 августа 2025, 18:08
List это интерфейс, ArrayList это его реализация. Почитай что такое полиморфизм.
+3
Valeria GlinskayaQA Automation Engineer в СберТех
15 августа 2025, 13:09
спасибо! вот тут нашла инфу https://javarush.com/quests/lectures/questcore.level02.lecture07
+1
Денис Enterprise Java Developer
15 августа 2025, 13:47решение
Вообще интерфейсы это довольно занятный механизм. Они описывают поведение, при этом реализация пользователя вообще не касается. Именно поэтому не так важно какая именно версия List'а лежит в переменной, с ней можно гарантировано работать как со списком, что гарантируется интерфейсом.
Наследование же, пусть и может внешне выглядеть схоже, преследует совершенно другую задачу. Например вынесение общей логики и/ли состояния в класс родитель.
+2