List list = new ArrayList();
ArrayList list = new ArrayList();
В чем принципиально различие?
Я знаю, что ArrayList имплементирует интерфейс List, но это заумно, что это значит на практике?
Java
JAVA, объясните, пожалуйста, простыми словами
2 варик используй и не парься
Максим Земцов
otvet.mail.ru/question/221056672
Восточный Братишка
В том то и дело, что я хочу знать разницу
В первом случае для объекта list по умолчанию (без явного преобразования list к типу ArrayList) доступны только методы, определённые в интерфейсе List.
Во втором случае для объекта list доступны все методы ArrayList.
Во втором случае для объекта list доступны все методы ArrayList.
Еркебулан Мариям Алтаевы
да ладна....
Еркебулан Мариям Алтаевы
если я создам List list = new ArrayList();
то я буду спокойно использовать все методы доступные для ArrayList...
то я буду спокойно использовать все методы доступные для ArrayList...
тебя на собеседовании об этом спросили или просто балду пинаешь?
а показанных кусках кода -- без разницы.
различия будут понятны только когда ты станешь включать это в свой код...
а показанных кусках кода -- без разницы.
различия будут понятны только когда ты станешь включать это в свой код...
Принципиальное различие в объявлении list - в первом случае это объект интерфейса List. И если мы на минутку "развидим" инициализацию объектом класса ArrayList представив что ее нет, то можем ожидать инициализацию list объектом любого (повторяю, ЛЮБОГО) класса реализующего упомянутый интерфейс.
Зачем это нужно - ну а зачем нужен интерфейс в ООП? Затем чтобы декларировать свойства объектов, его реализующих. Для того чтобы точно знать: у реализации есть эти свойства, к ним можно обращаться, и они совместимы с другими реализациями (если все сделано правильно). Это позволяет избегать жестких зависимостей: если надо работать только с общими свойствами логической группы классов (а интерфейс как раз и описывает такую группу, по сути), то мы указываем "типом" входных данных интерфейс - и нам становится безразлично, какая конкретно реализация прилетит фактическими данными, работаем только с теми которые ожидаем. Может прилететь даже та реализация, класса которой не существовало когда мы объявляли интерфейс.
Зачем это нужно - ну а зачем нужен интерфейс в ООП? Затем чтобы декларировать свойства объектов, его реализующих. Для того чтобы точно знать: у реализации есть эти свойства, к ним можно обращаться, и они совместимы с другими реализациями (если все сделано правильно). Это позволяет избегать жестких зависимостей: если надо работать только с общими свойствами логической группы классов (а интерфейс как раз и описывает такую группу, по сути), то мы указываем "типом" входных данных интерфейс - и нам становится безразлично, какая конкретно реализация прилетит фактическими данными, работаем только с теми которые ожидаем. Может прилететь даже та реализация, класса которой не существовало когда мы объявляли интерфейс.
Азат Жонкабай
Суть и мякотка интерфейсов в том что они позволяют абстрагироваться от индивидуальных свойств разных реализаций, работая с только с общеинтерфейсными свойствами, которые заранее декларированы.
На практике это означает что (например) старый код не нужно будет переписывать для добавления "поддержки" каждого нового класса - пока новые классы реализуют тот же самый старый интерфейс, код работающий с этим интерфейсом продолжит работать без изменений. Или (например) можем предоставить интерфейс другим разработчикам работающим параллельно, чтобы их пакеты "дружили" с нашими, и не приходилось каждое изменение классов согласовывать между собой.
На практике это означает что (например) старый код не нужно будет переписывать для добавления "поддержки" каждого нового класса - пока новые классы реализуют тот же самый старый интерфейс, код работающий с этим интерфейсом продолжит работать без изменений. Или (например) можем предоставить интерфейс другим разработчикам работающим параллельно, чтобы их пакеты "дружили" с нашими, и не приходилось каждое изменение классов согласовывать между собой.
Единственное отличие, которое может быть полезным: в пером случае переменной list можно присвоить ссылку на объект любого класса, который реализует интерфейс List (а не только класса ArrayList или его наследника). Во втором случае можно присвоить только объект класса ArrayList или класса, унаследованного от ArrayList.
Поскольку в примере не реализуется потенциальное преимущество первого варианта, никакого смысла в нём нет. О возможном недостатке первого варианта написал Андрей.
Поскольку в примере не реализуется потенциальное преимущество первого варианта, никакого смысла в нём нет. О возможном недостатке первого варианта написал Андрей.
ArrayList это дочка List.
В первой строке ты создаешь из объекта суперкласса поведение объекта дочернего класса который унаследован от суперкласса.
А во втором случае ты создаешь просто объект конкретного класса.
Разницы в поведении не будет, так как здесь проявляется полиморфизм. Единственное что из первого объекта ты сможешь перевыделить память и сделать его совершенно с другими свойствами, одной из дочек List (если сам суперкласс не является абстрактным) или же сделать его непосредственно List, а во втором случае объект ArrayList может быть только объектом класса ArrayList
В первой строке ты создаешь из объекта суперкласса поведение объекта дочернего класса который унаследован от суперкласса.
А во втором случае ты создаешь просто объект конкретного класса.
Разницы в поведении не будет, так как здесь проявляется полиморфизм. Единственное что из первого объекта ты сможешь перевыделить память и сделать его совершенно с другими свойствами, одной из дочек List (если сам суперкласс не является абстрактным) или же сделать его непосредственно List, а во втором случае объект ArrayList может быть только объектом класса ArrayList
Нурсултан Каирбеков
какая дочка?
Лист -- интерфейс... у него не может быть детей...
Лист -- интерфейс... у него не может быть детей...
Похожие вопросы
- Статическая и динамическая типизация в программировании - в чем разница? Пожалуйста, простыми словами, я новичок.
- объясните зачем метод void в java? как можно проще, я новичек К примеру тут public static void main (string[] args)
- Не могу понять ОБЪЕКТЫ в языках программ. Объясните простыми словами
- Для чего в Java нужна аннотация своими словами?
- Java | Помогите, пожалуйста с задачей.
- JAVA. Помогите, пожалуйста, дописать код программы:
- Что такое "ключи шифрования" простыми словами?
- Объясните пожалуйста, что происходит в этом коде:
- Объясните, пожалуйста, что такое static?
- Скажите пожалуйста простым понятным языком - ЧТО ТАКОЕ КОНСТРУКТОР?