HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-26
1 <p>На примере коллекций, мы первый раз столкнулись с типами данных, которые завязаны на интерфейс и имеют несколько его реализаций. Определение свойств и методов с такой структурой отличается от того, как мы до этого работали с примитивными типами.</p>
1 <p>На примере коллекций, мы первый раз столкнулись с типами данных, которые завязаны на интерфейс и имеют несколько его реализаций. Определение свойств и методов с такой структурой отличается от того, как мы до этого работали с примитивными типами.</p>
2 <p>Рассмотрим пример, когда мы работаем с числами или строками, то определяем свойства и методы соответственно:</p>
2 <p>Рассмотрим пример, когда мы работаем с числами или строками, то определяем свойства и методы соответственно:</p>
3 <p>Здесь мы указываем ровно тот тип, про который мы думаем. Применим такой же подход к спискам. Создадим класс пользователя, у которого есть возможность добавлять друзей:</p>
3 <p>Здесь мы указываем ровно тот тип, про который мы думаем. Применим такой же подход к спискам. Создадим класс пользователя, у которого есть возможность добавлять друзей:</p>
4 <p>Пока все выглядит отлично, но посмотрите на возможный пример использования.</p>
4 <p>Пока все выглядит отлично, но посмотрите на возможный пример использования.</p>
5 <p>Этот код не скомпилируется, потому что тип переменной friends будет List&lt;User&gt;, а не ArrayList&lt;User&gt; как ожидается. Правильным выходом из этой ситуации будет завязка не на конкретную реализацию ArrayList, а на интерфейс List.</p>
5 <p>Этот код не скомпилируется, потому что тип переменной friends будет List&lt;User&gt;, а не ArrayList&lt;User&gt; как ожидается. Правильным выходом из этой ситуации будет завязка не на конкретную реализацию ArrayList, а на интерфейс List.</p>
6 <p>Почему именно так? Фактически в этом и есть смысл интерфейсов. Реализация может поменяться, но код от этого меняться не должен, если интерфейс не меняется. Код выше работает с любой конкретной реализацией:</p>
6 <p>Почему именно так? Фактически в этом и есть смысл интерфейсов. Реализация может поменяться, но код от этого меняться не должен, если интерфейс не меняется. Код выше работает с любой конкретной реализацией:</p>
7 <p>Сегодня мы решили использовать ArrayList, а завтра захотели поменять его на LinkedList, потому что так будет эффективнее. Код по-прежнему будет работать:</p>
7 <p>Сегодня мы решили использовать ArrayList, а завтра захотели поменять его на LinkedList, потому что так будет эффективнее. Код по-прежнему будет работать:</p>
8  
8