Почему это законно в Java? Очередь <String>waitQueue = new LinkedList <> (); - PullRequest
0 голосов
/ 27 апреля 2020

В одном из руководств по очередям я увидел следующее:

Queue<String> waitingQueue = new LinkedList<>();

Почему это утверждение действительно в Java?

Я видел Что означает «программировать на интерфейс»? , но это не объясняет базовый c вопрос о том, почему приведенное выше утверждение является действительным. Если очередь является интерфейсом, как я могу типизировать объект к нему? Я могу реализовать интерфейс очереди только в классе для обеспечения нужного мне поведения.

Чего мне не хватает?

1 Ответ

3 голосов
/ 27 апреля 2020

Что такое интерфейс

Интерфейс - это, по сути, контракт, в котором говорится: «Это методы, которые должен реализовывать любой класс, реализующий этот интерфейс».

Объявление переменной или поля с интерфейсом. Тип в основном говорит: «Мне все равно, какой класс специфицируется c, который назначается здесь, при условии, что он следует контракту.»

LinkedList следует контракту, установленному Queue путем реализации всех необходимых методов.

Поэтому мы можем присвоить ссылку на объект типа LinkedList переменной типа Queue.

«Не может быть экземпляра интерфейса»

Разработчики часто узнают, что «вы не можете создать экземпляр интерфейса», что является правильным, но слегка вводящим в заблуждение.

Вы можете иметь объект, который является экземпляром типа интерфейса, имея экземпляр конкретного класса, который реализует этот интерфейс.

Так что пока вы можете не выполнить new Queue<String>() (так как Вы не можете создать экземпляр интерфейса) выражение new LinkedList<String>() фактически возвращает Queue<String> (потому что LinkedList<String> is-a Queue<String>, так же, как is-a Object).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...